tft每日頭條

 > 圖文

 > matplotlib畫圖注釋

matplotlib畫圖注釋

圖文 更新时间:2024-12-25 15:47:53

我這個傻子的matplotlib學習過程很神奇:

剛開始,找幾個教程,嘔吼,簡單,plt.*** 一頓寫。畫完了。遇到坐标啊之類的細節不會調?

打開谷歌,要啥搜啥。

matplotlib畫圖注釋(matplotlib先搞明白plt.)1

我最開始覺得這樣蠻好的,這是一個很容易學的lib嘛。

然後問題出現了,matplotlib最煩人的地方就是,同樣一個目标,你可以有N種不同的方法去實現他。比如說哦,加标題:

plt.set_title() 可以吧。 ax.title.set_text('title') 也可以吧。 ax.set_title()也可以啊。

所以到底要用哪個??

matplotlib畫圖注釋(matplotlib先搞明白plt.)2

當你在網上搜索答案的時候,你會遇到各種實現的方法,如果你隻是單純的把找到的答案copypaste,那總有一天你會和我一樣崩潰。感覺自己就是個沒有谷歌就不會畫圖的傻子。。。

所以,如果你:

  • 學習matplotlib的時候是從标題類似于"五分鐘教你matplotlib畫圖” 這種教程開始的
  • 起碼知道這一句 'import matplotlib.pyplot as plt'
  • 遇到稍微複雜的細節就要一頓查,遇到修改xy坐标,名稱,等等就頭大
  • 打開matplotlib的官方指南,不止一次,但是一臉懵逼
  • 在這幾個詞 figure, axes, axis 在matplotlib出現時就一臉完了的表情

那麼你不是一個人。我一直和你在一起。

所以這份指南是用來(嘗試)解決這個問題的。我們花短短的時間,來從根本上了解一下matplotlib的架構,各種名詞是什麼意思,一個正常的畫圖程序是什麼。

matplotlib畫圖注釋(matplotlib先搞明白plt.)3

plt.***和ax.***的區别

我認為所有不先講清楚plt.***和ax.*** 兩種畫圖方式的區别的教程都是耍流氓。一上來就告訴你,plt.figure(), plt.plot(), plt.show(),這麼畫就對了的,都是不負責任的表現!

  • 在matplotlib中,有兩種畫圖方式:
    • plt.figure(): plt.***系列。通過http://plt.xxx來畫圖,其實是取了一個捷徑。這是通過matplotlib提供的一個api,這個plt提供了很多基本的function可以讓你很快的畫出圖來,但是如果你想要更細緻的精調,就要使用另外一種方法。

plt.figure(1) plt.subplot(211) plt.plot(A,B) plt.show()

    • fig, ax = plt.subplots(): 這個就是正統的稍微複雜一點的畫圖方法了。指定figure和axes,然後對axes單獨操作。等下就講figure和axes都神馬意思。

fig, ax = plt.subplots() ax.plot(A,B)

matplotlib畫圖注釋(matplotlib先搞明白plt.)4

  • 大部分的新手教程,都是以http://plt.xxx開始的。我個人認為這不是一個很好的方式。的确, http://plt.xxx簡單易懂上手快,但是plt把matplotlib的結構看成一個blackbox,新手在不知道這個lib到底是如何運作的情況下以為自己上手了,可是當你需要細調你的圖的時候,你就發現你完全不明白網上的人為什麼要用http://ax.xxx, 為什麼還有其他那麼多種方式來加題目。這樣的學習過程是非常不利于長期發展的。
  • 因此,從我這個傻子的經驗,我強烈建議在初學matplotlib的時候,盡量避免使用http://plt.xxx系列。當你明白figure/axes/axis都是控制什麼的時候,如果你想要簡單的制作一個quick and dirty的圖,用http://plt.xxx才是OK。

名詞解釋 in matplotlib

matplotlib的名詞定于對于非英語母語的人來說實在是太不友好了。尤其是axes。仰天長嘯。

從官方借了個圖


matplotlib畫圖注釋(matplotlib先搞明白plt.)5

  • Figure fig = plt.figure(): 可以解釋為畫布。
    • 畫圖的第一件事,就是創建一個畫布figure,然後在這個畫布上加各種元素。
  • Axes ax = fig.add_subplot(1,1,1): 不想定義,沒法定義,就叫他axes!

1.首先,這個不是你畫圖的xy坐标抽!

2. 希望當初寫這個lib的時候他們用一個更好的名字。。。

3.可以把axes理解為你要放到畫布上的各個物體。比如你要畫一個太陽,一個房子,一個車在

4.畫布上,那麼太陽是一個axes,房子是一個axes,etc。

5.如果你的figure隻有一張圖,那麼你隻有一個axes。如果你的figure有subplot,那麼每一個subplot就是一個axes

6.axes是matlibplot的宇宙中心!axes下可以修改編輯的變量非常多,基本上能包含你的所有需求。

  • Axis ax.xaxis/ax.yaxis: 對,這才是你的xy坐标軸。

每個坐标軸實際上也是由豎線和數字組成的,每一個豎線其實也是一個axis的subplot,因此ax.xaxis也存在axes這個對象。對這個axes進行編輯就會修改xaxis圖像上的表現。

圖像的各個部位名稱

再從使用指南 User Guide 借個圖。每個部分的名稱指南,這樣當你想修改一個部位的時候,起碼知道關鍵字啊。

matplotlib畫圖注釋(matplotlib先搞明白plt.)6

一步一步來,用傳統方法畫個圖

下面就是實戰。用調取ax的方式來畫個圖。不要用plt!!

Import library and data for ploting

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].***


matplotlib畫圖注釋(matplotlib先搞明白plt.)7

好了畫布搞好了,畫數據。

注意,我們這裡依然不使用plt!因為我們要在這個axes上畫數據,因此就用ax.plot()來畫。畫完第一個再call一次,再畫第二個。

ax.plot(A,B) ax.plot(B,A)


matplotlib畫圖注釋(matplotlib先搞明白plt.)8

下面開始細節的處理

數據畫好了就可以各種細調坐标軸啊,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()

matplotlib畫圖注釋(matplotlib先搞明白plt.)9

這樣一個醜陋的基本圖的繪畫和編輯就完成了。如果有一些其他的細節調整,在搜索的時候,盡量選擇不用plt的答案。原則上來說,plt和ax畫圖兩者是可以互相轉換的,然而轉換過程讓你的代碼更複雜,有時還會産生難以理解的bug。因此畫圖的時候,請堅持使用一種格式。

結尾:

小編近幾年在學習Python!對于想學習Python的朋友們,我想說:很多人學了一個星期就放棄了,為什麼呢?其實沒有好的學習資料給你去學習,你們是很難堅持的,這是小編收集的Python入門學習資料關注,轉發,後台(我主頁上方)“滴滴”小編“06”,即可免費領取!希望對你們有幫助!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved