Python 資料視覺化筆記(三) — 使用Matplotlib繪圖

初始化

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
%matplotlib notebook #在notebook裡與Matplotlib互動

圖片顯示中文

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False

繪圖

plt.plot(x,y)
plt.scatter(x,y)
plt.bar(x,y)
plt.barh(x,y)
plt.hist(x,y)
plt.subplot(列,行,圖形編號)
plt.axhline(y) #水平線
plt.axvline(x) #垂直線
plt.fill_between #陰影
plt.hlines() #水平線圖表
plt.vlines() #垂直線圖表
#散佈圖
plt.scatter(X, Y, s=75, c=T, alpha=.5)
#輸入X和Y作為location,size=75,顏色為T,透明度alpha為50%
#柱狀圖
plt.bar(X, Y, facecolor='#9999ff', edgecolor='white')
#facecolor設置主體顏色,edgecolor設置邊框顏色為白色
#直方圖
plt.hist(X, Y)
#水平線
plt.axhline(y = avg_pts)
#垂直線
plt.axvline(y = avg_pts)
#水平線圖表
plt.hlines(y,xmin,xmax)
#陰影
plt.fill_between(pp_stats.index, avg_pts, pp_stats["pts"],
where=pp_stats["pts"] >= avg_pts, color="gray",
alpha=0.5, interpolate=True)
#一張圖繪製多個數據集
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x),
x, np.sin(2 * x))
#一個視窗多張圖(本例為4張)
x = np.linspace(0, 10, 100)
plt.subplot(2,2,1) #plt.subplot(總行數,總列數,活躍區)
plt.plot(x, np.sin(x), 'r')
plt.subplot(2,2,2)
plt.plot(x, np.cos(x), 'g')
plt.subplot(2,2,3)
plt.plot(x, np.tan(x), 'b')
plt.subplot(2,2,4)
plt.plot(x, np.tan(x), 'n')

設定圖名、標題、註解、圖例、節點

plt.xlabel(‘XXX’)                   #X軸名稱
plt.ylabel(‘YYY’) #Y軸名稱
plt.title(‘TTT’) #標題
plt.subtitle('AAA') #副標題
plt.xlim((1,100)) #X軸範圍
plt.ylim((1,100)) #y軸範圍
plt.xticks([1,2,]) #X軸刻度
plt.xticks([1,2,]) #Y軸刻度
plt.legend() #顯示圖例
plt.plot(x, y, marker='o') #顯示節點
#針對特定數值進行註解
plt.annotate('Toyota Corolla', xy=(19,33.9), xytext = (21,35),
arrowprops=dict(facecolor='black', shrink=0.05))
#添加注釋文字
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text. \mu\ \sigma_i\ \alpha_t$',
fontdict={'size': 16, 'color': 'r'})
#其中(-3.7,3)是選取text的位置, 空格需要用到字符\ ,fontdict設置文本字體.
#設置Y軸刻度及名稱
plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
#使用plt.yticks設置y軸刻度以及名稱:刻度為[-2, -1.8, -1, 1.22, 3];對應刻度的名稱為[‘really bad’,’bad’,’normal’,’good’, ‘really good’]#設置圖例
l1, = plt.plot(x, y1, label='linear line')
l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
plt.legend(loc='upper right')
#legend將要顯示的訊息來自於上面代碼中的 label
#參數'upper right'表示圖例將添加在圖中的右上角
#移除上方與右方邊框
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
#編輯順序(前景與背景)
plt.scatter(..., zorder=1) #background
plt.plot(..., zorder=2) #foreground

使用不同主題

plt.style.available #列出可用的風格plt.style.use('fivethirtyeight') 
plt.style.use('dark_background')
plt.style.use('ggplot')
plt.style.use('bmh')
plt.plot() #繪圖#不同顏色的圖
plt.plot(x,y,'r')(紅色)
plt.plot(x,y,'k')(黑色)
顏色有以下參數:'b','g','r','c','m','y','k'
#線條風格
plt.plot(x,y,'o')
風格有以下參數:'o','^','s'
#結合不同顏色與線條風格
plt.plot(x,y,'ro')

儲存圖片檔

plt.savefig('xxx.png',dpi=30,bbox_inches='tight')

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store