最近總是需要用matplotlib繪制一些圖,由於是新手,所以總是需要去翻書來找怎么用,即使剛用過的,也總是忘。所以,想寫一個入門的教程,一方面幫助我自己熟悉這些函數,另一方面有比我還小白的新手可以借鑒,大神就繞路吧。這篇文章是根據《利用Python進行數據分析》總結出來的,不是很全面,但是作為入門,足夠了。
首先,需要能啟動IPython 交互界面吧,這個如果還沒有啟動的話,就自行百度吧。
如果安裝了Anaconda,那么以這種方式啟動IPython吧。
這樣會將IPython配置為使用你所指定的matplotlib GUI 后端(Tk,wxPython,PyQt,Mac OS X native,GTK)。【雖然不知道這些都是些什么,不過打開pylab就夠用了】
matplotlib 不是太長了嗎,我們通常引入這樣的約定:
import matplotlib.pyplot as plt
就是個縮寫嘛,大多數高端人員也遵循這個約定,咱就服從吧。
首先,我們來繪制一個figure對象。
立馬就會生成一個這樣的窗口:
好,這是第一步。
但是不能通過空figure繪圖。必須使用add_subplot()創建一個或多個subplot才行。
看以上三行代碼,figure變成了這樣:
這三行代碼的意思是:圖像是2X2的,且當前選中是4個中的第n個。(222)就是2X2 中的第二2,(2,2,3)就是2X2中的第三個。可分割也可不分割,當超過10的話需要分割了吧。
好,第二步也成功做完了。接下來,發出一條繪圖命令。如plt.plot([1.5, 2, 4, -2, 1.6]) #繪制幾個點連接
我們來試一下。
恩,此時matplotlib就會在最后一個用過的subplot(如果沒有則創建一個)上面進行繪制。
這幾步完成的還不錯吧,那下面我們再進一步探索。
*************************************************分割線****************************************************
我們運行一下這兩行代碼:
from numpy.random import randn #導入隨機模塊
plt.plot(randn(50).cumsum(), 'k--')
其實就是在0到50隨機生成一個數組,然后繪制在最后一個用過的subplot里面,注意是線段類型,虛線。
那如何繪制圖像在其他的subplot里面呢?下面就演示如何做。
ax1.hist(randn(100), bins = 20, color = 'k', alpha = 0.3)
ax2.scatter(np.arange(30), np.arange(30) + 3 * randn(30))
至此,應該能非常熟練的在figure對象中繪圖了吧。
還可以在matplotlib的文檔中找到各種圖表類型。
**********************************************分割線**********************************************************
由於根據特定布局創建Figure和subplot是一件很常見的任務,於是便出現了一個更為方便的方法。
fig, axes = plt.subplots(2, 3)
這樣,一步就完成上節兩步完成的工作。
-----------------------------------------------------------------------
pyplot.subplots有幾個選項
nrows:subplot的行數
ncols:subplot的列數
sharex:所有subplot共享x軸刻度
sharey:所有subplot共享Y軸刻度
subplot_kw:用於創建各subplot的關鍵字字典
**fig_kw:創建figure時的其他關鍵字,如plt.subplots(2,2,figuresize=(8,6))
-------------------------------------------------------------------------
加了參數,共享x軸y軸。
我們再試着調整一下subplot周圍的邊距。
Figure有一個頂級函數subplot_adjust。
subplots_adjust(left = None, bottom = None, right = None, top = None, wsapce = None, hspace = None )
wspace 和 hspace是控制寬度和高度的百分比。下面將間距收縮到了0.
又是新知識吧。接下來,學習顏色和線型。
************************************分割線**************************************************
新建一個fig
fig = plt.plot()
再新建一個fig
data = randn(30).cumsum()
plt.plot(data, 'k--', label = 'Default')
plt.plot(data, 'k-', drawstyle = 'steps-post', label = 'steps-post')
plt.legend(loc='best') #在合適的位置放置圖例。
設置標題,軸標簽,刻度以及刻度標簽。
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(randn(1000).cumsum())
隨機漫步。我們來給上圖添加標簽。
ticks = ax.set_xtickets([0, 250, 500, 750, 1000])
可以看出,x標簽變成我們制定的標簽。y軸標簽可想而知了。
再來設置title
ax.set_title('My First matplotlib plot')
再用set_xlabel為X軸設置一個名稱。
ax.set_xlabel('Stages')
Y軸的跟X軸幾乎是一樣的。再小白也能看懂吧。
添加圖例(legend):
上面兩張圖是一樣的,后面只是上面圖放大了,注意圖例的位置。
ax.legend(loc = 'best') #會選擇一個最不礙事的位置。
要從圖例中去除一個或多個元素,不傳入label或傳入lable = '_nolegend_'
還有一些這樣的選項。
***************************************************分割線*****************************************************
又上一層樓。 嘻嘻。
好了,一口氣寫這么些,后面的再慢慢更新吧。
今天接着入門,白小白可以看,大神繞路。
***************************************************分割線*****************************************************
今天接着入門,白小白可以看,大神繞路。
今天以畫圖開始。
畫個長方形,三角形,圓形(橢圓)。
Matplotlib有一些表示常見圖形的對象,這些對象被稱為塊(patch)。完整的集合位於matplotlib.patches。
fig = plt.figure()
ax = fig.add_subplot(111)
rect = plt.Rectangle((0.2,0.75), 0.4, 0.15, color = ‘r’, alpha = 0.3)#左下起點,長,寬,顏色,α
circ = plt.Circle((0.7,0.2), 0.15, color = ‘b’, alpha = 0.5)#圓心,半徑,顏色,α
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]], color = ‘g’, alpha = 0.5 )#頂點坐標顏色α
α表示的是圖表的填充不透明度。在(0,1)之間。
ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)
補充一個:如何在圖上指定位置添加文本、箭頭,或其他圖形呢?
答:可以通過text、arrow、annotate等函數進行添加。下面看一個添加文本的例子。
ax.text(0.7, 0.6, ‘Hello World!’, family = ‘monospace’, fontsize = 10)
可以看到圖片里面指定位置有我們添加的文字信息。
那生成了圖表文件怎么保存呢?
利用plt.savefig可以將當前圖表保存到文件。
Plt.savefig(‘figpath.svg’, dpi = 400, bbox_inches = ‘tight’ )
#文件類型是通過文件擴展名推斷出來的,可以保存為.pdf.
Dpi是 ‘每英寸點數’分辨率,bbox_inches可以剪除當前圖表周圍的空白部分
保存到了一個.pdf的文件中。
Figure.savefig有一下選項:
Fname: 含有路徑的字符串或python文件型對象。.pdf,.png根據擴展名推斷得出。
dpi: 圖像分辨率(每英寸點數),默認為100
facecolor,edgecolor: 圖像的背景色,默認為‘w’(白色)
format: 顯式設置文件格式(‘png’,‘pdf’,‘svg’,‘ps’,‘eps’…)
bbox_inches:圖表需要保存的部分。如果設置為‘tight’,則嘗試剪除圖表周圍的空白部分。
***********************分割線********************************
Matplotlib實際上是一種比較低級的繪圖工具。要組裝一章圖表,你得用它的各種基礎組件才行。下面介紹一下pandas中的繪圖函數。簡單入門級別的集中。
************************分割線*******************************
線型圖:
Series和DataFrame都有一個用於生成各類圖表的plot方法。默認情況下,他們所生成的是線型圖。
s = Series(na.random.randn(10).cumsum(), index = np.arange(0,100,10))
s.plot()