我這個傻子的matplotlib學習過程很神奇:
剛開始,找幾個教程,嘔吼,簡單,plt.*** 一頓寫。畫完了。遇到坐标啊之類的細節不會調?
打開谷歌,要啥搜啥。
我最開始覺得這樣蠻好的,這是一個很容易學的lib嘛。
然後問題出現了,matplotlib最煩人的地方就是,同樣一個目标,你可以有N種不同的方法去實現他。比如說哦,加标題:
plt.set_title() 可以吧。
ax.title.set_text('title') 也可以吧。
ax.set_title()也可以啊。
當你在網上搜索答案的時候,你會遇到各種實現的方法,如果你隻是單純的把找到的答案copypaste,那總有一天你會和我一樣崩潰。感覺自己就是個沒有谷歌就不會畫圖的傻子。。。
所以,如果你:
那麼你不是一個人。我一直和你在一起。
所以這份指南是用來(嘗試)解決這個問題的。我們花短短的時間,來從根本上了解一下matplotlib的架構,各種名詞是什麼意思,一個正常的畫圖程序是什麼。
我認為所有不先講清楚plt.***和ax.*** 兩種畫圖方式的區别的教程都是耍流氓。一上來就告訴你,plt.figure(), plt.plot(), plt.show(),這麼畫就對了的,都是不負責任的表現!
plt.figure(1)
plt.subplot(211)
plt.plot(A,B)
plt.show()
fig, ax = plt.subplots()
ax.plot(A,B)
matplotlib的名詞定于對于非英語母語的人來說實在是太不友好了。尤其是axes。仰天長嘯。
從官方借了個圖
1.首先,這個不是你畫圖的xy坐标抽!
2. 希望當初寫這個lib的時候他們用一個更好的名字。。。
3.可以把axes理解為你要放到畫布上的各個物體。比如你要畫一個太陽,一個房子,一個車在
4.畫布上,那麼太陽是一個axes,房子是一個axes,etc。
5.如果你的figure隻有一張圖,那麼你隻有一個axes。如果你的figure有subplot,那麼每一個subplot就是一個axes
6.axes是matlibplot的宇宙中心!axes下可以修改編輯的變量非常多,基本上能包含你的所有需求。
每個坐标軸實際上也是由豎線和數字組成的,每一個豎線其實也是一個axis的subplot,因此ax.xaxis也存在axes這個對象。對這個axes進行編輯就會修改xaxis圖像上的表現。
再從使用指南 User Guide 借個圖。每個部分的名稱指南,這樣當你想修改一個部位的時候,起碼知道關鍵字啊。
下面就是實戰。用調取ax的方式來畫個圖。不要用plt!!
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
A = np.arange(1,5)
B = A**2
C = A**3
我喜歡用這個命令來開始畫圖。哪怕你沒有subplot,也可以用這個subplots來創建一個畫布。
這個function創建了一個大小為(14,7)的畫布,把這個畫布賦值給變量fig,同時在這個畫布上創建了一個axes,把這個axes賦值給ax。這樣,所有未來的http://fig.xxx都是對這個畫布的操作,所有http://ax.xxx都是對這個axes的操作。
如果你有兩個圖,那麼ax是一個有兩個元素ax[0],ax[1] 的list。ax[0]就對應第一個subplot的ax。
fig, ax = plt.subplots(figsize=(14,7))
# fig, ax = plt.subplots(2,1,figsize(14,7))
# ax[0].***
# ax[1].***
注意,我們這裡依然不使用plt!因為我們要在這個axes上畫數據,因此就用ax.plot()來畫。畫完第一個再call一次,再畫第二個。
ax.plot(A,B)
ax.plot(B,A)
數據畫好了就可以各種細調坐标軸啊,tick啊之類的。
首先把标題和xy坐标軸的标題搞定。Again, 不用plt。直接在axes上進行設定。
ax.set_title('Title',fontsize=18)
ax.set_xlabel('xlabel', fontsize=18,fontfamily = 'sans-serif',fontstyle='italic')
ax.set_ylabel('ylabel', fontsize='x-large',fontstyle='oblique')
ax.legend()
然後是xy坐标軸的一些屬性設定, 也是在axes level上完成的
ax.set_aspect('equal')
ax.minorticks_on()
ax.set_xlim(0,16)
ax.grid(which='minor', axis='both')
最後是坐标軸tick和細節,這個在axes.xaxis or axes.yaxis上完成。
ax.xaxis.set_tick_params(rotation=45,labelsize=18,colors='w')
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end,1))
ax.yaxis.tick_right()
這樣一個醜陋的基本圖的繪畫和編輯就完成了。如果有一些其他的細節調整,在搜索的時候,盡量選擇不用plt的答案。原則上來說,plt和ax畫圖兩者是可以互相轉換的,然而轉換過程讓你的代碼更複雜,有時還會産生難以理解的bug。因此畫圖的時候,請堅持使用一種格式。
結尾:小編近幾年在學習Python!對于想學習Python的朋友們,我想說:很多人學了一個星期就放棄了,為什麼呢?其實沒有好的學習資料給你去學習,你們是很難堅持的,這是小編收集的Python入門學習資料關注,轉發,後台(我主頁上方)“滴滴”小編“06”,即可免費領取!希望對你們有幫助!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!