Python繪圖實(shí)現(xiàn)坐標(biāo)軸共享與復(fù)用詳解
多組數(shù)據(jù)
在一副圖像中表現(xiàn)多組數(shù)據(jù)時(shí),可能會(huì)遇到不同數(shù)據(jù)之間數(shù)據(jù)相差較大的情況,為此可在同一個(gè)坐標(biāo)框中設(shè)置不同的坐標(biāo)刻度,以實(shí)現(xiàn)下圖所示效果。為了實(shí)現(xiàn)這一功能,關(guān)鍵函數(shù)即為twinx。
import numpy as np import matplotlib.pyplot as plt x = np.arange(10) y = 2**x dy = np.diff(y) sinx = np.sin(x) fig, ax = plt.subplots() p1 = ax.bar(x, y, color='blue') ax.set(xlabel="x", ylabel="y") ax.yaxis.label.set_color('blue') ax.tick_params(axis='y', colors="blue") ax2 = ax.twinx() p2, = ax2.plot(x[1:], dy, "C1") ax2.set(ylabel="diff(y)") ax2.yaxis.label.set_color(p2.get_color()) ax2.tick_params(axis='y', colors=p2.get_color()) ax3 = ax.twinx() ax3.spines.right.set_position(("axes", 1.2)) p3, = ax3.plot(x, sinx, "C2") ax3.set(ylabel="sin(x)") ax3.yaxis.label.set_color(p3.get_color()) ax3.tick_params(axis='y', colors=p3.get_color()) plt.tight_layout() plt.show()
上述代碼中,一共有三組y yy軸,分別是主坐標(biāo)軸ax和后續(xù)創(chuàng)建的孿生坐標(biāo)軸ax2和ax3。
先看ax的設(shè)置,主要用到了三個(gè)方法,分別是
- set 用于設(shè)置x , y x,yx,y的坐標(biāo)標(biāo)簽
- yaxis.label.set_color,用于設(shè)置y yy軸坐標(biāo)標(biāo)簽的顏色
- ax.tick_params 設(shè)置坐標(biāo)刻度的顏色,
ax2通過(guò)twinx函數(shù)新增了一個(gè)坐標(biāo)軸,其設(shè)置與ax基本相同,唯一的區(qū)別是,在設(shè)置顏色時(shí),采用了get_color()函數(shù),從而直接在圖像中提取顏色。
ax3與ax2還有一個(gè)差別,即在新建坐標(biāo)軸之后,調(diào)用ax3.spines.right.set_position,以設(shè)置刻度線(xiàn)的位置。
雙刻度
除了上面那種多組數(shù)據(jù)的情況,有時(shí)為了照顧不同文化的人群,即使對(duì)一組數(shù)據(jù)可能也要設(shè)計(jì)兩組坐標(biāo),并采取不同的單位。比如常見(jiàn)的角度制和弧度制,二者互有優(yōu)劣,那么在繪制圖像時(shí),可以分別將這兩種坐標(biāo)都表現(xiàn)出來(lái)。為此,可直接調(diào)用secondary_xaxis方法來(lái)實(shí)現(xiàn)
x = np.linspace(0,10,101) y = np.sin(x) ax = plt.subplot() ax.plot(x,y) ax.set_xlabel('angle [rad]') secax = ax.secondary_xaxis('top', functions=(np.rad2deg, np.deg2rad)) secax.set_xlabel('angle [degrees]') plt.show()
其第一個(gè)參數(shù)為坐標(biāo)位置,可選top, bottom, left和right。第二個(gè)參數(shù)為坐標(biāo)轉(zhuǎn)換函數(shù)。
效果如下
坐標(biāo)共享
有時(shí)需要在一個(gè)圖像中使用多個(gè)坐標(biāo),而有的時(shí)候則剛好有相反的需求,當(dāng)一個(gè)圖像中有多個(gè)子圖時(shí),若這些子圖坐標(biāo)的含義相同,那么省略一些坐標(biāo)可以讓圖像更加簡(jiǎn)潔,從而有了共用坐標(biāo)的需求。在【plt】中,通過(guò)sharex或者sharey可以起到共享x或y軸坐標(biāo)的作用。示例如下
x = np.linspace(-5,5,100) ys = [np.sin(x+i) for i in range(5)] fig,axes = plt.subplots(2,2,sharex=True, sharey=True) axes = axes.reshape(-1) for i in range(4): axes[i].plot(x, ys[i]) plt.show()
效果如下,左上角的子圖沒(méi)有x刻度值,右下角則沒(méi)有y刻度值,右上角則什么坐標(biāo)軸也沒(méi)有。
直接通過(guò)subplots來(lái)創(chuàng)建圖窗和坐標(biāo)軸,盡管用一行代碼解決了很多問(wèn)題,但相應(yīng)地也不夠靈活,而靈活添加坐標(biāo)軸的函數(shù)add_subplot也有sharex和sharey的參數(shù),但二者并不是布爾型參數(shù),而是需要輸入希望共享的坐標(biāo)軸?;谶@種方式,也可以提供與上圖相同的解決方案,代碼如下
fig = plt.figure() ax3 = fig.add_subplot(223) ax3.plot(x,ys[2]) ax1 = fig.add_subplot(221, sharex=ax3) ax1.plot(x,ys[0]) ax1.tick_params(axis="x", labelbottom=False) ax4 = fig.add_subplot(224, sharey=ax3) ax4.plot(x,ys[3]) ax4.tick_params(axis="y", labelleft=False) ax2 = fig.add_subplot(222, sharex=ax4, sharey=ax1) ax2.plot(x,ys[1]) ax2.tick_params(axis="x", labelbottom=False) ax2.tick_params(axis="y", labelleft=False) plt.show()
到此這篇關(guān)于Python繪圖實(shí)現(xiàn)坐標(biāo)軸共享與復(fù)用詳解的文章就介紹到這了,更多相關(guān)Python坐標(biāo)軸共享內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch中torch.stack()函數(shù)的深入解析
在pytorch中常見(jiàn)的拼接函數(shù)主要是兩個(gè),分別是:stack()和cat(),下面這篇文章主要給大家介紹了關(guān)于Pytorch中torch.stack()函數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08解決pip安裝報(bào)錯(cuò)“error:microsoft visual c++ 14.0&nbs
這篇文章主要介紹了解決pip安裝報(bào)錯(cuò)“error:microsoft visual c++ 14.0 or greater is required”問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Django自定義YamlField實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Django自定義YamlField實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11淺談Scrapy網(wǎng)絡(luò)爬蟲(chóng)框架的工作原理和數(shù)據(jù)采集
在python爬蟲(chóng)中:requests + selenium 可以解決目前90%的爬蟲(chóng)需求,難道scrapy 是解決剩下的10%的嗎?顯然不是。scrapy框架是為了讓我們的爬蟲(chóng)更強(qiáng)大、更高效。接下來(lái)我們一起學(xué)習(xí)一下它吧。2019-02-02python selenium爬取斗魚(yú)所有直播房間信息過(guò)程詳解
這篇文章主要介紹了python selenium爬取斗魚(yú)所有直播房間信息過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08如何解決requests,已經(jīng)安裝卻無(wú)法import問(wèn)題
這篇文章主要介紹了如何解決requests,已經(jīng)安裝卻無(wú)法import問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06python字符串str和字節(jié)數(shù)組相互轉(zhuǎn)化方法
下面小編就為大家?guī)?lái)一篇python字符串str和字節(jié)數(shù)組相互轉(zhuǎn)化方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03基于python list對(duì)象中嵌套元組使用sort時(shí)的排序方法
下面小編就為大家分享一篇基于python list對(duì)象中嵌套元組使用sort時(shí)的排序方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04