matplotlib 簡單上手

本文總結(jié)自途索的慕課網(wǎng)課程逛薇,增加了些自己的理解狼犯。

matplotlib 是一個優(yōu)秀的數(shù)據(jù)可視化庫凡纳,可以很方便的使用Python生成方便我們分析的數(shù)據(jù)圖表窃植,一起來看看吧。

導(dǎo)入必要的包

import matplotlib.pyplot as plt
import numpy as np

如果是在jupyter中操作荐糜,可以使用%matplotlib inline這個魔術(shù)方法巷怜,它會將matplotlib繪制的圖表顯示在記事本中,方便直觀的瀏覽暴氏。

同時我們還導(dǎo)入了numpy延塑,它是Python語言的一個擴(kuò)充程序庫。支持高級大量的維度數(shù)組與矩陣運(yùn)算答渔,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫关带。

準(zhǔn)備繪圖數(shù)據(jù)

下面我們用它來生成一些繪圖需要的數(shù)據(jù):

x = np.linspace(-np.pi, np.pi, 256)
c, s = np.cos(x), np.sin(x)

linspace方法指定均勻的生成256個從-pi到pi之間的點(diǎn),返回一個np.array形式的數(shù)組沼撕。

見名知意宋雏,np.cos(x)np.sin(x)是對x做了余弦和正弦的計算,并同樣返回數(shù)組务豺。

開始畫圖

有了數(shù)據(jù)我們開始畫圖:

plt.figure(1)  # 當(dāng)作是新建一個畫布

# 在畫布上畫兩個圖形
plt.plot(x, c)  # x是橫軸磨总,c是縱軸
plt.plot(x, s)

plt.show()  # 顯示圖像
圖1

豐富我們的圖形

當(dāng)然,讓面只是一個最簡單的例子笼沥,實(shí)際操作時我們需要更多的標(biāo)注信息蚪燕,來時我們繪制的圖形更易讀娶牌。

線形、顏色和標(biāo)題

在我們原來的代碼上做些許修改:

plt.figure(1)
plt.plot(x, s, color='red', linestyle='-', label='sin')  # label 后面繪制圖例用
plt.plot(x, c, 'b--', label='cos')  # b* 同時表示顏色和線型

plt.title('sin&cos') # 添加title信息

plt.show()
圖2

移動坐標(biāo)軸

看起來好多了馆纳, 可是坐標(biāo)軸在兩側(cè)有點(diǎn)別扭诗良,我們把它挪到中間:

# 獲取軸編輯器
ax = plt.gca()
# 將圖像的上邊框和右邊框隱藏
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 將圖像的下邊框和左邊框設(shè)置到數(shù)據(jù)域的0位置
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))

plt.show()
圖3

修改坐標(biāo)值,添加圖例

看起來不錯鲁驶,不過橫軸看不出來我們的繪制點(diǎn)和pi有啥關(guān)系累榜,我們需要修改下單位信息,同時把圖例加上灵嫌。

# 指定五個點(diǎn)壹罚,使用laText,編輯公式并顯示
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.legend(loc='upper left')  # 根據(jù)label顯示的圖例相對于畫面的位置
plt.grid()  # 顯示網(wǎng)格線

plt.show()
圖4

至此我們畫了一個比較可觀的圖形了寿羞,下面是完整代碼:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-np.pi, np.pi, 256)
c, s = np.cos(x), np.sin(x)

plt.figure(1)
plt.plot(x, s, color='red', linestyle='-', label='sin')  # label 后面繪制圖例用
plt.plot(x, c, 'b--', label='cos')  # b* 同時表示顏色和線型

plt.title('sin&cos') # 添加title信息

# 獲取軸編輯器
ax = plt.gca()

# 將圖像的上邊框和右邊框隱藏
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 將圖像的下邊框和左邊框設(shè)置到數(shù)據(jù)域的0位置
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))

# 指定五個點(diǎn)猖凛,使用laText,編輯公式并顯示
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.legend(loc='upper left')
plt.grid()

plt.show()

散點(diǎn)圖的繪制

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

fig.add_subplot(3,3,1)  # 將圖像分割成三行三列绪穆,畫在第一個區(qū)域中

n = 128
X = np.random.normal(0,1,n)  # 生成隨機(jī)高斯分布辨泳,0是均值,1是標(biāo)準(zhǔn)差玖院,生成128個
Y = np.random.normal(0,1,n)

T = np.arctan2(Y, X)  # 上色用

plt.scatter(X, Y, s=10, c=T)  # s表示點(diǎn)的大小菠红, c是顏色

# 限制軸的范圍
plt.axis([-2,2,-2,2])  # [xmin, xmax, ymin, ymax]

plt.xticks([])  # 取消顯示軸上的數(shù)值
plt.yticks([])

plt.title('scatter')

plt.xlabel('x')
plt.ylabel('y')

plt.show()
圖5

柱狀圖的繪制

# 柱狀圖
fig.add_subplot(332) # 等價于 (3,3,2)

n = 10
X = np.arange(n)

Y1 = (1-X/float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5, 1.0, n)

plt.bar(X, +Y1, facecolor='red')
plt.bar(X, -Y2, facecolor='blue')

plt.xticks([])  # 取消顯示軸上的數(shù)值
plt.yticks([])

# 添加注釋
for x, y in zip(X, Y1):
    plt.text(x, y, '%.2f' % y, ha='center', va='bottom')

for x, y in zip(X, Y2):
    plt.text(x, -y, '%.2f' % -y, ha='center', va='top')

plt.show()
圖6

繪制餅圖

# 餅圖
fig.add_subplot(333)

n = 10

Z = np.ones(n)
Z[-1] = 2

plt.pie(Z, colors=['%.2f' % (i/float(n)) for i in range(n)], 
        labels=['%.2f' % (i/float(n)) for i in range(n)])

plt.gca().set_aspect('equal')

plt.xticks([])  # 取消顯示軸上的數(shù)值
plt.yticks([])

plt.title('pie')

plt.show()
圖7

繪制極坐標(biāo)圖

# 極坐標(biāo)
fig.add_subplot(334, polar=True)  # 畫圖用的是plot, 所以指定polar

n = 20

theta = np.arange(0, 2*np.pi, 2*np.pi/n)
radii = 10*np.random.rand(n)

plt.plot(theta, radii) 

plt.title('polar')

plt.show()
圖8

熱圖

# 熱圖
fig.add_subplot(335)

from matplotlib import cm  # 上色用
cmap = cm.Blues

data = np.random.rand(3,3)
plt.imshow(data, cmap=cmap)

plt.title('heatmap')

plt.show()
圖9

3D圖

from mpl_toolkits.mplot3d import Axes3D  # 引入三維坐標(biāo)系
fig.add_subplot(336, projection='3d')  # 設(shè)置三維畫布

X = [0,3]
Y = [0,3]
Z = [0,3]

plt.plot(X,Y,Z)

plt.title('3d')

plt.show()
圖10

熱力圖

# 熱力圖
fig.add_subplot(313)

def f(x,y):
    return (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - Y**2)

n = 256

x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)

X, Y = np.meshgrid(x, y)

plt.contourf(X, Y, f(X,  Y), cmap=plt.cm.hot)

plt.show()
圖11

結(jié)語

好啦难菌,至此我們用matplotlib繪制了大多數(shù)的圖形樣式试溯,并且使用了繪制子圖的方式,將其繪制在同一個畫布中郊酒,相信你已經(jīng)可以根據(jù)自己的需求繪制相應(yīng)的圖形了遇绞。

最后如果我們想要保存繪制好的圖形可以這樣操作:

plt.savefig('./fig.png')

在項目目錄下就會的到保存的圖片啦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末燎窘,一起剝皮案震驚了整個濱河市摹闽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褐健,老刑警劉巖付鹿,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚜迅,居然都是意外死亡舵匾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門慢叨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纽匙,“玉大人,你說我怎么就攤上這事拍谐≈虻蓿” “怎么了馏段?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長践瓷。 經(jīng)常有香客問我院喜,道長,這世上最難降的妖魔是什么晕翠? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任喷舀,我火速辦了婚禮,結(jié)果婚禮上淋肾,老公的妹妹穿的比我還像新娘硫麻。我一直安慰自己,他們只是感情好樊卓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布拿愧。 她就那樣靜靜地躺著,像睡著了一般碌尔。 火紅的嫁衣襯著肌膚如雪浇辜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天唾戚,我揣著相機(jī)與錄音柳洋,去河邊找鬼。 笑死叹坦,一個胖子當(dāng)著我的面吹牛熊镣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播立由,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼轧钓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锐膜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弛房,失蹤者是張志新(化名)和其女友劉穎道盏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體文捶,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荷逞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粹排。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片种远。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖顽耳,靈堂內(nèi)的尸體忽然破棺而出坠敷,到底是詐尸還是另有隱情妙同,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布膝迎,位于F島的核電站粥帚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏限次。R本人自食惡果不足惜芒涡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卖漫。 院中可真熱鬧费尽,春花似錦、人聲如沸羊始。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽店枣。三九已至速警,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸯两,已是汗流浹背闷旧。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钧唐,地道東北人忙灼。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像钝侠,于是被迫代替她去往敵國和親该园。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

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