日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中的matplotlib.pyplot_python matplotlib中axes与axis的区别?

發(fā)布時(shí)間:2024/1/23 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的matplotlib.pyplot_python matplotlib中axes与axis的区别? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.axes subplot axis

先說第一個(gè)疑惑 Axes - Subplot - Axis 之間到底是個(gè)什么關(guān)系?

因?yàn)槲沂桥υ诳从⑽牡慕坛?#xff0c;所以剛開始對(duì)axes和axis是基本搞不清的,一個(gè)是軸的復(fù)數(shù),一個(gè)是軸,好像設(shè)定圖像屬性的時(shí)候經(jīng)常用axes,具體到某個(gè)坐標(biāo)軸的時(shí)候才會(huì)用axis。然后教程還說,subplot和axes基本就是一個(gè)意思。真是坑坑坑。。。

扛不住,翻了翻中文教程,好像有的教程就直接把a(bǔ)xes翻譯成子圖了,好像這個(gè)世界就壓根沒有subplot和axes的區(qū)別。。看了半天,其實(shí)我還是覺得axes翻譯成軸域比較貼切,下面就結(jié)合后來看到的各種教程來講講自己最后的理解。

1.1 先明確Figure的概念

import numpy as np

import matplotlib.pyplot as plt

fig = plt.figure()

plt.show()

我們先理清figure的概念。用畫板和畫紙來做比喻的話,figure就好像是畫板,是畫紙的載體,但是具體畫畫等操作是在畫紙上完成的。在pyplot中,畫紙的概念對(duì)應(yīng)的就是Axes/Subplot。

fig = plt.figure()

ax = fig.add_subplot(111)

ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes', ylabel='Y-Axis', xlabel='X-Axis')

plt.show()

所以就算我們只有一個(gè)子圖,我們也可以生成一個(gè)subplot,然后來在對(duì)這個(gè)subplot對(duì)象進(jìn)行各種軸、標(biāo)注、刻度等的設(shè)定。

1.2 Axes 和 Subplot 的概念上細(xì)微的區(qū)別

fig = plt.figure()

ax1 = fig.add_subplot(211)

ax2 = fig.add_subplot(212)

print type(ax1)

plt.show()

第一個(gè)例子是用subplot()方法。

subplot()方法很好理解。里面?zhèn)魅氲娜齻€(gè)數(shù)字,前兩個(gè)數(shù)字代表要生成幾行幾列的子圖矩陣,底單個(gè)數(shù)字代表選中的子圖位置。這個(gè)例子中我們生成了2行1列的子圖矩陣。可以分別在兩個(gè)subplot中畫圖。

fig = plt.figure()

ax3 = fig.add_axes([0.1, 0.1, 0.8, 0.8])

ax4 = fig.add_axes([0.72, 0.72, 0.16, 0.16])

print type(ax3) plt.show()

第二個(gè)例子是用add_axes()方法。

我覺得軸域(Axes)的感念確實(shí)可以先理解成一些軸(Axis)的集合,當(dāng)然這個(gè)集合還有很多軸(Axis)的屬性,標(biāo)注等等。我們用add_axes()方法生成一個(gè)軸域(Axes),括號(hào)里面的值前兩個(gè)是軸域原點(diǎn)坐標(biāo)(從左下角計(jì)算的),后兩個(gè)是顯示坐標(biāo)軸的長度。當(dāng)我們生成了軸域的時(shí)候,從結(jié)果上看確實(shí)是生成了一個(gè)可以畫圖的子圖。我們可以分別在兩個(gè)軸域(Axes)中畫圖。

對(duì)比兩種方法,兩種對(duì)象,我們可以總結(jié)總結(jié):兩種對(duì)象確實(shí)是“你中有我,我中有你”的關(guān)系,生成子圖(subplot)的時(shí)候,必然帶著所謂的一套軸域(Axes)。而用軸域(Axes)方法,客觀上就是生成了一個(gè)可以畫圖的子圖。

add_subplot()方法在生成子圖過程,簡單明了,而用add_axes()方法,則生成子圖的靈活性更強(qiáng),完全可以實(shí)現(xiàn)add_subplot()方法的功能,可以控制子圖顯示位置,甚至實(shí)現(xiàn)相互重疊的效果。例如:

2 Axes方法與pyplot函數(shù)

用野路子法,也就是直接看代碼,不懂的就查文檔,看別人的代碼的時(shí)候,圖像的的各種特性經(jīng)常用兩套方法實(shí)現(xiàn),對(duì)學(xué)習(xí)過真是毀滅性打擊。所以遇到模仿的瓶頸的時(shí)候,還是要找些教程看看。這里基本照搬翻譯,https://github.com/matplotlib/AnatomyOfMatplotlib 教程中的Part1的 Axes methods vs. pyplot 一節(jié)。

plt.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3)

plt.xlim(0.5, 4.5)

plt.show()

fig = plt.figure()

ax = fig.add_subplot(111)

print type(ax)

ax.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3) ax.set_xlim(0.5, 4.5)

plt.show()

本次畫圖涉及到的兩步操作,畫圖和設(shè)定x軸的顯示范圍,分別用前后兩種方法實(shí)現(xiàn)。

第一種,調(diào)用了pyplot中的 plot() 函數(shù)和 xlim() 函數(shù),

第二種,使用了生成的Subplot對(duì)象的兩種方法 .plot 和 .set_xlim方法。

實(shí)際上,實(shí)現(xiàn)整個(gè)畫圖過程可以用兩套工具來分別實(shí)現(xiàn),其實(shí)這也是貫穿整個(gè)python編程的兩種思路,函數(shù)式編程和對(duì)象式編程。我們?cè)谶@里可以比較一下兩套工具的優(yōu)缺點(diǎn):以 plot() 為代表的函數(shù)式操作,表達(dá)簡潔,但是沒有體現(xiàn)出真正畫圖的實(shí)現(xiàn)過程,例如甚至當(dāng)沒有搞清楚Figure Axes Subplot 等概念的時(shí)候,依然可以輕松的用pyplot函數(shù)畫圖。當(dāng)子圖較多的時(shí)候,對(duì)子圖的操作容易陷入混亂,因?yàn)閺拇a上并不能字節(jié)觀察出到底在操作那張子圖。

以 .plot 為代表的對(duì)象式操作,表達(dá)明確,分步生成 Figure 和 Axes/Subplot,操作過程直接可以看出是在那張子圖上操作。但是缺點(diǎn)就是,需要寫的代碼比較多,不夠簡潔。

這里要吐槽一下我看的這個(gè)教程,作者提出了在 PEP20 中,“Python之道”(The Zen of Python)提到了“明了勝于晦澀”(Explicit is better than implicit),所以作者在整個(gè)教程中都是使用了對(duì)象式的方法。但是其實(shí)”Python之道“的下一句就是“簡潔勝于復(fù)雜”(Complex is better than complicated)。

所以,還是看你的使用場景,假如不需要畫子圖的時(shí)候,用一用簡單的pyplot方法也沒什么不好。但是初學(xué)者最好還是能夠堅(jiān)持先使用Axes對(duì)象屬性的方法,這樣對(duì)于畫圖的實(shí)現(xiàn)過程可以加深理解。

參考資料:

總結(jié)

以上是生活随笔為你收集整理的python中的matplotlib.pyplot_python matplotlib中axes与axis的区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。