Python實現(xiàn)雙X軸雙Y軸繪圖的示例詳解
詐尸人口回歸。這一年忙著灌水忙到頭都掉了,最近在女朋友的提醒下終于想起來博客的賬號密碼,正好今天灌水的時候需要畫一個雙X軸雙Y軸的圖,研究了兩小時終于用Py實現(xiàn)了。找資料的過程中沒有發(fā)現(xiàn)有系統(tǒng)的文章,反正代碼都整理出來了,我決定順勢水一篇。
目前找到的plt實現(xiàn)雙X軸雙Y軸繪圖方式有兩種:
使用fig.add_subplot
方式將兩對坐標(biāo)系疊加在一個fig上實現(xiàn)雙X軸雙Y軸效果。所有調(diào)整均可完美實現(xiàn),推薦該方式
通過axes.twinx().twiny()
方式實現(xiàn)雙X軸雙Y軸圖形繪制。問題在于對于第二個Y軸的各種設(shè)置無效,label可以通過手動添加的方式創(chuàng)建并指定顏色,而tick顏色則無法修改。可能需要等待官方修復(fù),或者嘗試先使用 ax1=axes.twinx()
方式,從ax1
中獲取第二個Y軸,然后再使用ax2.twiny()
創(chuàng)建第二個X軸。
fig.add_subplot 方式實現(xiàn)雙X軸雙Y軸繪圖
""" 使用plt,通過fig.add_subplot方式將兩對坐標(biāo)系疊加在一個fig上實現(xiàn)雙X軸雙Y軸效果。 所有調(diào)整均可完美實現(xiàn),推薦該方式 """ import matplotlib.pyplot as plt import numpy as np """生成數(shù)據(jù)并設(shè)置繪圖參數(shù)""" x = np.arange(1, 12, 4) y = np.arange(1, 4, 1) x2=x*10 y2=y**2 # 設(shè)置兩種繪圖顏色 c1='r' c2='b' # 設(shè)置字體大小 fontsize=12 # 設(shè)置畫布大小 width,height=16,14 # 單位為cm;因為保存圖片時使用 bbox_inches = 'tight' 可能使圖片尺寸略微放大,所以此處寬度設(shè)置得略小 # 設(shè)置刻度線在坐標(biāo)軸內(nèi) plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' """繪圖""" lns=[] # 用于存儲繪圖句柄以合并圖例的list # 創(chuàng)建畫布并設(shè)置大小 fig=plt.figure() fig.set_size_inches(width/2.54, height/2.54) # 因為畫布輸入大小為厘米,此處需轉(zhuǎn)換為英寸,所以除以2.54 # 通過 add_subplot 方式創(chuàng)建兩個坐標(biāo)軸,相當(dāng)于在同一個子圖上疊加了兩對坐標(biāo)系 ax=fig.add_subplot(111, label="1") ax2=fig.add_subplot(111, label="2", frame_on=False) # 繪制圖1并將繪圖句柄返回,以便添加合并圖例 lns1=ax.plot(x,y,color=c1,label=c1) lns=lns1 lns2=ax2.plot(x2,y2, color=c2,label=c2) lns+=lns2 """圖形美化""" # 調(diào)整第二對坐標(biāo)軸的label和tick位置,以實現(xiàn)雙X軸雙Y軸效果 ax2.xaxis.tick_top() ax2.yaxis.tick_right() ax2.xaxis.set_label_position('top') ax2.yaxis.set_label_position('right') # 設(shè)置坐標(biāo)軸標(biāo)注 ax.set_xlabel("X1", color=c1,fontsize=fontsize) ax.set_ylabel("Y1", color=c1,fontsize=fontsize) ax2.set_xlabel('X2', color=c2,fontsize=fontsize) ax2.set_ylabel('Y2', color=c2,fontsize=fontsize) # 設(shè)置圖表標(biāo)題 fig.suptitle("Title",fontsize=fontsize+2) # 設(shè)置坐標(biāo)軸刻度顏色 ax.tick_params(axis='x', colors=c1) ax.tick_params(axis='y', colors=c1) ax2.tick_params(axis='x', colors=c2) ax2.tick_params(axis='y', colors=c2) # 設(shè)置坐標(biāo)軸線顏色 ax.spines["left"].set_color("r") # 修改左側(cè)顏色 ax.spines["right"].set_color("b") # 修改右側(cè)顏色 ax.spines["top"].set_color("b") # 修改上邊顏色 ax.spines["bottom"].set_color("r") # 修改下邊顏色 # 添加圖例 labs = [l.get_label() for l in lns] ax.legend(lns, labs, loc=0,fontsize=fontsize) plt.tight_layout() plt.show()
使用 axes.twinx().twiny() 方式實現(xiàn)雙X軸雙Y軸繪圖
""" 使用plt,通過 axes.twinx().twiny() 方式實現(xiàn)雙X軸雙Y軸圖形繪制。 問題在于對于第二個Y軸的各種設(shè)置無效,label可以通過手動添加的方式創(chuàng)建并指定顏色,而tick顏色則無法修改 """ import matplotlib.pyplot as plt import numpy as np """生成數(shù)據(jù)并設(shè)置繪圖參數(shù)""" x = np.arange(1, 12, 4) y = np.arange(1, 4, 1) x2=x*10 y2=y**2 # 設(shè)置兩種繪圖顏色 c1='r' c2='b' # 設(shè)置字體大小 fontsize=12 # 設(shè)置刻度線在坐標(biāo)軸內(nèi) plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' """繪圖""" lns=[] # 用于存儲繪圖句柄以合并圖例的list # 創(chuàng)建畫布 fig,axes=plt.subplots() fig.set_size_inches(10, 8) # 繪制圖1并將繪圖句柄返回,以便添加合并圖例 lns1=axes.plot(x,y,color=c1,label=c1) lns=lns1 # 創(chuàng)建雙x軸雙y軸 twin_axes=axes.twinx().twiny() # 使用畫布的初始坐標(biāo)軸對象創(chuàng)建第二對坐標(biāo)軸,類似于在雙x軸的基礎(chǔ)上疊加雙y軸 # 繪制圖2并將繪圖句柄返回,以便添加合并圖例 lns2=twin_axes.plot(x2,y2,color=c2,label=c2) lns+=lns2 """圖形美化""" # 設(shè)置坐標(biāo)軸標(biāo)注 axes.set_xlabel("X1",color=c1, fontsize=fontsize) axes.set_ylabel("Y1",color=c1, fontsize=fontsize) twin_axes.set_xlabel("X2",color=c2, fontsize=fontsize) twin_axes.set_ylabel("Y2",color=c2, fontsize=fontsize) # 第二個y軸設(shè)置標(biāo)注無效 # 設(shè)置圖表標(biāo)題 fig.suptitle("Title",fontsize=fontsize+2) # 設(shè)置第二個y軸的label;由于set_ylabel無效,因此只能通過該種方式手動添加 loc_text_x=np.min(plt.xlim())+np.ptp(plt.xlim())*1.03 loc_text_y=np.min(plt.ylim())+np.ptp(plt.ylim())*0.5 str_text='Y2' twin_axes.text(loc_text_x, loc_text_y, str_text,rotation=90,color=c2,fontsize=fontsize) # 設(shè)置坐標(biāo)軸刻度顏色 axes.tick_params('x', colors=c1) axes.tick_params('y', colors=c1) twin_axes.tick_params('x', colors=c2) twin_axes.tick_params('y', colors=c2) # 設(shè)置坐標(biāo)軸線顏色 twin_axes.spines["left"].set_color("r") # 修改左側(cè)顏色 twin_axes.spines["right"].set_color("b") # 修改右側(cè)顏色;同第二個y軸的label設(shè)置一樣,該設(shè)置也不起作用 twin_axes.spines["top"].set_color("b") # 修改上邊顏色 twin_axes.spines["bottom"].set_color("r") # 修改下邊顏色 # 添加圖例 # lns = lns1+lns2 labs = [l.get_label() for l in lns] axes.legend(lns, labs, loc=0,fontsize=fontsize) plt.tight_layout() plt.show()
到此這篇關(guān)于Python實現(xiàn)雙X軸雙Y軸繪圖的示例詳解的文章就介紹到這了,更多相關(guān)Python雙軸繪圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析python中numpy包中的argsort函數(shù)的使用
這篇文章主要介紹了python中numpy包中的argsort函數(shù)的使用,argsort()函數(shù)在模塊numpy.core.fromnumeric中,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2018-08-08python實現(xiàn)在windows下操作word的方法
這篇文章主要介紹了python實現(xiàn)在windows下操作word的方法,涉及Python操作word實現(xiàn)打開、插入、轉(zhuǎn)換、打印等操作的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04對python PLT中的image和skimage處理圖片方法詳解
今天小編就為大家分享一篇對python PLT中的image和skimage處理圖片方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01