Python易筋經(jīng)-matplotlib

“孔德之容定鸟,惟道是從。
道之為物著瓶,惟恍惟惚联予。
惚兮恍兮,其中有象材原;恍兮惚兮沸久,其中有物;窈兮冥兮余蟹,其中有精卷胯。
其精甚真,其中有信威酒。
自古及今窑睁,其名不去,以閱眾甫兼搏。
吾何以知眾甫之狀哉卵慰?
以此》鹕耄”[1]

Python 在處理數(shù)據(jù)裳朋、分析數(shù)據(jù)以及數(shù)據(jù)可視化方面擁有很多功能強(qiáng)大的工具,這也是 Python 在科學(xué)領(lǐng)域中能夠迅速發(fā)展的一個(gè)主要原因。今天記錄一下matplotlib鲤嫡,在數(shù)據(jù)可視化方面送挑,你必須熟練shying它。

Matplotlib

Matplotlib 是 Python 的一個(gè)繪圖庫暖眼。它包含了大量的工具惕耕,你可以使用這些工具創(chuàng)建各種圖形,包括簡單的散點(diǎn)圖诫肠,正弦曲線司澎,甚至是三維圖形。Python 科學(xué)計(jì)算社區(qū)經(jīng)常使用它完成數(shù)據(jù)可視化的工作栋豫。
首先引入模塊包:

import matplotlib.pyplot as plt

畫一段正弦曲線

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,10,50)  #在指定的間隔內(nèi)返回均勻間隔的數(shù)字挤安。
plt.plot(x,np.sin(x)) #定義顯示x軸,y軸數(shù)據(jù)
plt.show() #圖顯示

輸出圖形如下:


plt_output_sin.png

疊加繪制兩個(gè)數(shù)據(jù)集

試試用上面的50個(gè)數(shù)字繪制正弦曲線和余弦曲線的疊加丧鸯。

plt.plot(x,np.sin(x),x,np.cos(x))
plt.show()

輸出圖形如下:


plt_2layer_sinXcos.png

自定義圖形的外觀

當(dāng)在同一個(gè)圖形上展示多個(gè)數(shù)據(jù)集時(shí)蛤铜,通過改變線條的外觀來區(qū)分不同的數(shù)據(jù)集變得非常必要。

plt.plot(x,np.sin(x),'r-o',x,np.cos(x),'g--')
plt.show()

輸出圖形如下:


set_linetype.png

代碼展示了兩種不同的曲線樣式:'r-o' 和 'g--'

'-o' 代表包含實(shí)心點(diǎn)標(biāo)記的實(shí)線丛肢,'--' 代表虛線
顏色:藍(lán)色 - 'b' 綠色 - 'g' 紅色 - 'r' 青色 - 'c' 品紅 - 'm' 黃色 - 'y' 黑色 - 'k' 白色 - 'w'
線:直線 - '-' 虛線 - '--' 點(diǎn)線 - ':' 點(diǎn)劃線 - '-.'
常用點(diǎn)標(biāo)記:點(diǎn) - '.' 像素 - ',' 圓 - 'o' 方形 - 's' 三角形 - '^' 更多點(diǎn)標(biāo)記樣式

處理文字

text()命令可以在任意的位置添加文字围肥,xlabel(),ylabel(),title()分別是添加x軸,y軸標(biāo)簽和標(biāo)題蜂怎。

import matplotlib.pyplot as plt
import numpy as np
# Fixing random state for reproducibility
np.random.seed(19680801)
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
# the histogram of the data
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='b', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

輸出圖形:

plot_text_demo.png

所有的text()命令會(huì)返回一個(gè)matplotlib.text.Text實(shí)例穆刻,通過屬性或者setp()來改變他們。
t = plt.xlabel(‘my data’, fontsize=14, color=’red’)
使用數(shù)學(xué)表達(dá)式

plt.title(r'$\sigma_i=15$')

前置的r是指定它后面的字符串是原始的字符串派敷,然后用$包裹表示中間的是數(shù)學(xué)表達(dá)式蛹批,\表示轉(zhuǎn)譯具體的數(shù)學(xué)符號(hào)。

注釋

annotate()方法提供了一個(gè)注釋的方法篮愉。
annotate(string,xy,xytest,arrowprops)

ax = plt.subplot(111)
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)
plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='red', shrink=0.05),
)
plt.ylim(-2,2)
plt.show()

輸出圖形:


plot_annotate.png

默認(rèn)的情況下腐芍,xy和xytext使用的坐標(biāo)是數(shù)據(jù)的坐標(biāo),你也可以指定其他的坐標(biāo)系統(tǒng)试躏。

使用子圖

在一個(gè)窗口繪制多張圖猪勇,將上述的疊加的用不同曲線樣式的例子用子圖的方式改造:

plt.subplot(2,1,1)
plt.plot(x,np.sin(x),'r-o')
plt.subplot(2,1,2)
plt.plot(x,np.cos(x),'g--')
plt.show()

輸出圖形如下:


2layer_subgraph.png

使用子圖只需要一個(gè)額外的步驟,就可以像前面的例子一樣繪制數(shù)據(jù)集颠蕴。即在調(diào)用 plot() 函數(shù)之前需要先調(diào)用 subplot() 函數(shù)泣刹。該函數(shù)的第一個(gè)參數(shù)代表子圖的總行數(shù),第二個(gè)參數(shù)代表子圖的總列數(shù)犀被,第三個(gè)參數(shù)代表活躍區(qū)域椅您。

活躍區(qū)域代表當(dāng)前子圖所在繪圖區(qū)域,繪圖區(qū)域是按從左至右寡键,從上至下的順序編號(hào)掀泳。例如在 3×3 的方格上,活躍區(qū)域 4 在方格上的坐標(biāo)為 (1, 1)。

散點(diǎn)圖

散點(diǎn)圖是一堆離散點(diǎn)的集合员舵。用 Matplotlib 畫散點(diǎn)圖也同樣非常簡單脑沿。
還以畫正弦曲線為例:

plt.scatter(x,np.sin(x))
plt.show()

輸出圖形:


plt_scatter.png

只需要調(diào)用 scatter() 函數(shù)并傳入兩個(gè)分別代表 x 坐標(biāo)和 y 坐標(biāo)的數(shù)組。注意马僻,我們通過 plot 命令并將線的樣式設(shè)置為 'bo' 也可以實(shí)現(xiàn)同樣的效果庄拇。

彩色映射散點(diǎn)圖

另一種你可能用到的圖形是彩色映射散點(diǎn)圖。這里我們會(huì)根據(jù)數(shù)據(jù)的大小給每個(gè)點(diǎn)賦予不同的顏色和大小韭邓,并在圖中添加一個(gè)顏色欄措近。

x = np.random.rand(1000)
y = np.random.rand(1000)
size = np.random.rand(1000)*50
colors = np.random.rand(1000)
plt.scatter(x,y,size,colors)
plt.colorbar()
plt.show()

輸出圖形:


plt_scatter_colors.png

上面的代碼大量的用到了 np.random.rand(1000),原因是我們繪圖的數(shù)據(jù)都是隨機(jī)產(chǎn)生的仍秤。

同前面一樣我們用到了 scatter() 函數(shù)熄诡,但是這次我們傳入了另外的兩個(gè)參數(shù),分別為所繪點(diǎn)的大小和顏色诗力。通過這種方式使得圖上點(diǎn)的大小和顏色根據(jù)數(shù)據(jù)的大小產(chǎn)生變化。

然后我們用 colorbar() 函數(shù)添加了一個(gè)顏色欄我抠。

直方圖

直方圖是 Matplotlib 中最簡單的圖形之一苇本。你只需要給 hist() 函數(shù)傳入一個(gè)包含數(shù)據(jù)的數(shù)組。第二個(gè)參數(shù)代表數(shù)據(jù)容器的個(gè)數(shù)菜拓。數(shù)據(jù)容器代表不同的值的間隔瓣窄,并用來包含我們的數(shù)據(jù)。數(shù)據(jù)容器越多纳鼎,圖形上的數(shù)據(jù)條就越多俺夕。

z = np.random.rand(1000)
plt.hist(z,50)
plt.show()

輸出圖形:


plt_column.png

添加標(biāo)題豁遭、坐標(biāo)軸標(biāo)記和圖例

數(shù)據(jù)仍然使用上述正弦曲線和余弦曲線疊加圖的那個(gè)系洛,現(xiàn)在把標(biāo)簽和縱橫坐標(biāo)標(biāo)簽以及圖例加上:

plt.plot(x,np.sin(x),'r-o',label='Sin(x)') # 要顯示圖例,需定義lable參數(shù)
plt.plot(x,np.cos(x),'g-^',label='Cos(x)')
plt.legend() #圖例
plt.xlabel('Xlabel') #x軸標(biāo)簽
plt.ylabel('Ylabel') #y軸標(biāo)簽
plt.title('my title') # 標(biāo)題
plt.show()

輸出圖形:


plt_complete.png

網(wǎng)上這篇帖子康谆,對(duì)matplotlib的使用整理的也很出彩逗宁,可以移步去看看:
Python--matplotlib繪圖可視化知識(shí)點(diǎn)整理


  1. 老子《道德經(jīng)》第二十一章映九,老子故里,中國鹿邑瞎颗。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末件甥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哼拔,更是在濱河造成了極大的恐慌引有,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倦逐,死亡現(xiàn)場離奇詭異譬正,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門导帝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來守谓,“玉大人,你說我怎么就攤上這事您单≌瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵虐秦,是天一觀的道長平酿。 經(jīng)常有香客問我,道長悦陋,這世上最難降的妖魔是什么蜈彼? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮俺驶,結(jié)果婚禮上幸逆,老公的妹妹穿的比我還像新娘。我一直安慰自己暮现,他們只是感情好还绘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著栖袋,像睡著了一般拍顷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塘幅,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天昔案,我揣著相機(jī)與錄音,去河邊找鬼电媳。 笑死踏揣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匆背。 我是一名探鬼主播呼伸,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钝尸!你這毒婦竟也來了括享?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤珍促,失蹤者是張志新(化名)和其女友劉穎铃辖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猪叙,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娇斩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年仁卷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犬第。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锦积,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出歉嗓,到底是詐尸還是另有隱情丰介,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布鉴分,位于F島的核電站哮幢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏志珍。R本人自食惡果不足惜橙垢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伦糯。 院中可真熱鬧柜某,春花似錦、人聲如沸舔株。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽载慈。三九已至,卻和暖如春珍手,著一層夾襖步出監(jiān)牢的瞬間办铡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工琳要, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寡具,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓稚补,卻偏偏與公主長得像童叠,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子课幕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容