Figures
- 除了可以使用前述的plot()方法來繪圖之外,Matplotlib尚提供其他方法來繪製其他形式的圖表。
- scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)[source]:scatter是散佈圖,當然也可以使用plot()來繪製散佈圖。
- hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, hold=None, data=None, **kwargs)[source]:統計直條圖。
- Bar chart有以下三種語法:
- bar(x, height, *, align='center', **kwargs)
- bar(x, height, width, *, align='center', **kwargs)
- bar(x, height, width, bottom, *, align='center', **kwargs)
- 可以在之後使用plt.xticks(x,[...])來修改ticks的顯示。也可以直接使用tick_label屬性來改變,e.g. tick_label=['a','b','c','d','e','f','g','h','i','j']
- width表示長條的寬度(default: 0.8),color為長條顏色。
- linewidth為長條邊框寬度,edgecolor為長條邊框顏色。
- align表示長條的對應位置,可選擇center(default)與edge兩種。
- log=True(False): y軸的值取log。
- Barh為水平向的bar chart,一樣有三種語法:
- barh(y, width, *, align='center', **kwargs)
- barh(y, width, height, *, align='center', **kwargs)
- barh(y, width, height, left, *, align='center', **kwargs)
- 原則上皆與bar chart類似,但是方向相反,所以x改為y,width改為height,bottom改為left。
- 無論是直條圖還是橫條圖,都可以加上err,以橫條圖為例:
- xerr=err: 每一筆資料對應的錯誤範圍值。
- error_kw={'ecolor':'red', 'capsize':6}: ecolor: err線段顏色,capsize: err的cap大小。
- alpha: transparency。
- 若是有多種資料,一樣類似方法繪製。
- gap設計來移動條圖的位置,以免重疊在一起。
- plt.xticks(index+gap, index): 移動ticks位置,使其對齊條圖中間。
- Stacked Bar Chart
- 一樣使用plt.bar(plt.barh)來建立,只是要記得加上bottom=value1與bottom=value1+value2來表示資料的堆疊關係。餘皆相同。
- 若是要繪製橫向Stacked Bar Chart,要記得將bottom改為left。
- 上述的長條圖,都可以加上hatch來增加圖案,使得各筆資料間區隔更明顯。以下使用橫向Stack Bar Chart為例。
- hatch可以使用的圖案有: -,+,x,\\,/,*,o,O,.,\\必須至少兩條,免得被錯認為逸出字(escape character)。
- 給予的符號數量越多,表示圖形密度越高,e.g. hatch=".", hatch="..", hatch="..."
- 雙向長條圖
- 就是長條圖,把另一筆資料顯示在-y方向。
- 標示文字訊息時,使用zip()函數來取得座標,ha表示horizontalalignment,va表示verticalalignment。
- matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)
- 跟之前類似需要x與y,在此使用label與amount表示。
- explode=[0.15,0,0,0,0]: 第一項資料(在此為Book)外突0.15。
- startangle=0: 從0度開始,逆時針方向。
- shadow=True: 加上陰影。
- autopct='%.2f%%': 自動計算比例,格式為小數後兩位。若要去除百分比號,可使用"%.2f"。
- plt.axis('scaled'): 改變圖型的軸,請自行嘗試其他選項。
- matplotlib.pyplot.contour([X, Y,] Z, [levels], **kwargs)
- 建立x,y兩筆資料,使用np.meshgrid(x,y)建立格子點座標。
- 建立一個函數,計算任一筆座標的對應高度。
- plt.contour(m, n, f(m,n), 8, colors='black'): 繪製等高線圖的輪廓,共8層。
- plt.contourf(m, n, f(m,n), 8, alpha=0.5): 使用顏色填滿等高線圖。
- plt.clabel(C, inline=1, fontsize=10): 標示等高線圖的數值,若inline=0表示連續線段,會與數值重疊。
- plt.colorbar(): 產生圖旁的顏色比例尺。
- 若是在plt.contourf()內加上參數cmap=plt.cm.hot,表示為溫度量圖,圖型會套用溫度量圖的設定。
- Check more information here。
- matplotlib.pyplot.polar(theta, r, **kwargs)
- 為了使用顏色分辨各筆資料,建立genColor()函數來產生隨機顏色碼。
- plt.axes([0.05,0.05,0.95,0.95], polar=True): 繪製軸線,第一個參數為左上角及右下角座標,亦即可利用此來控制大小。polar須為True來形成圓形。
- plt.bar(theta, radii, width=(2*np.pi/N), bottom=0, color=[genColor() for i in range(N)]): 計算平均寬度讓每一項佔有一樣的弦寬,bottom=0表示連至圓心。
- mplot3D: Axes3D.plot(xs, ys, *args, **kwargs)
- 為了繪製3D圖型,需要from mpl_toolkits.mplot3d import Axes3D。
- ax = Axes3D(fig): 將figure cast成為3D物件。
- ax.plot(x, y, z, label='parametric curve', color='r'): 給x,y,z參數值即可繪製3D線形圖。
- mplot3D: Axes3D.scatter(xs, ys, zs=0, zdir='z', s=20, c=None, depthshade=True, *args, **kwargs)
- 設計三組(x,y,z)座標,並分別使用ax.scatter()方法繪製散佈圖。
- 使用ax.set_xlabel('X')設定坐標軸的label。
- Axes3D.plot_wireframe(X, Y, Z, *args, **kwargs)
- Axes3D.plot_surface(X, Y, Z, *args, **kwargs)
- ax.plot_wireframe(x,y,z,rstride=1,cstride=1): 繪製網格,若僅有此指令顯示圖型架構網格。
- ax.plot_surface(x,y,z,rstride=1, color='tomato'): 繪製表面。
- rstride=1表示row跨度,cstride=1表示column跨度,跨度越小表示線條越密。
- ax.view_init(elev=60, azim=125): 視角,elev上下旋轉,azim左右旋轉。
- cmap=plt.cm.hot: 將plt.com.hot之設定應用到圖型上。
- fig.colorbar(surf, shrink=0.5, aspect = 15): 若沒有cmap,則無作用。shrink=0.5控制長度,aspect = 15控制寬度。
- bar3d(x, y, z, dx, dy, dz, color=None, zsort='average', shade=True, *args, **kwargs)
- 設計x,y,z的值,在此三者皆為1D-array(所以使用ravel(),可嘗試直接建立長度為20的array)。
- ax.bar3d(x,y,bottom, 0.5, 0.5,z,color='g',shade = True): dx與dy為x,y的寬度,z到dz為z的長度(柱子高度)。
- 另一個方式可以繪製2D於3D,e.g.
- zdir='y': 表示以y的值當作z方向,若改為zdir='x'改用x的值。
pyplot9.py
with Pandas
- 之前提過Pandas中的Series與DataFrame皆可直接使用plot()方法來繪製圖型,但若是要繪製長條圖或其他圖型,則可使用參數關鍵字kind,e.g.
-
Series.plot(kind='line', ax=None, figsize=None, use_index=True, title=None, grid=None, legend=False, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, label=None, secondary_y=False, **kwds)。
- Series的kind可使用的選擇有: line, bar, barh, hist, box, kde, density, area, pie
- DataFrame的kind可使用的選擇有: line, bar, barh, hist, box, kde, density, area, pie, scatter, hexbin
- 這方式雖然便利,不過有些功能較少,例如無法改變title的格式,所以若是要較完整的功能,建議還是使用matplotlib。
pyplot10.py