您好,登錄后才能下訂單哦!
今天小編給大家分享一下Python+Matplotlib怎么繪制雙y軸圖像的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
雙Y軸圖顧名思義就是在一個圖里有兩個Y軸。這種圖形主要用來展示兩個因變量和一個自變量的關系并且兩個因變量的數值單位還不同。如我們想要展示不同月份公司銷業績以及成本的變化情況這時就可以用雙Y軸圖來展示。(因變量銷量和成本具有不同的單位)。
繪制雙y軸的思想,也是用到了matplotlib面向對象繪圖的思想。在不指定位置的情況下,在一個畫布上創建出兩個坐標系,其中第一個坐標系正常創建,第二個坐標系則使用專有的twinx()方法創建。
則兩個坐標系的位置重合。第一個坐標系軸在左,通過twinx()方法創建出的坐標系則軸在右。因為有了兩個y軸,所以再對y軸屬性進行操作的時候,則需要面向對象,如果再簡單地使用plt.ylabel()等方法,則只能操作到左軸,而影響不到右軸。
下邊做一個示例,首先是導包和準備數據,這里準備一組銷量數據,并計算其增長率,將其體現在右軸。
具體代碼如下:
import matplotlib.pyplot as plt # 生成一組數據 x = range(7) y1 = [2000, 1600, 3000, 6200, 7000, 9800, 11000] y2 = [1] for i in range(len(y1)): if i+1 == len(y1): break rate = round(y1[i+1]/y1[i] - 1, 2) y2.append(rate) fig = plt.figure(figsize=(10, 8), facecolor='#ff33ff') # 字體使用楷體 plt.rcParams['font.sans-serif'] = ['STKAITI'] plt.rcParams['axes.unicode_minus'] = False # 背景色為cc00ff plt.rcParams['axes.facecolor'] = '#cc00ff' ax1 = fig.add_subplot(111) plt.title('銷售量及其增長率圖示', color='#ffff00', fontsize=25, y=1.04) plt.xticks(x, ['1月', '2月', '3月', '4月', '5月', '6月', '7月'], color='#ffff00', fontsize=15) plt.xlabel('月份', color='#ff0033', fontsize=15) plt.yticks(color='#B22222', fontsize=15) ax1.bar(x, y1, color='#33ff66', label='left') ax1.set_ylabel('銷售量(件)', color='#66ff00', fontsize=20) # 增加一條坐標軸 ax2 = ax1.twinx() ax2.plot(x, y2, color='#3399ff', linestyle='--', marker='o', linewidth=2) ax2.set_ylabel("增長率", color='#66ff00', fontsize=20) ax2.tick_params(axis='y', color='green', labelsize=15, labelcolor='#B22222') for a, b in zip(x, y2): plt.text(a, b+0.02, '%.2f' % b, ha='center', va='bottom', fontsize=15, color='red') plt.show()
圖像效果如下圖:
具體實現代碼如下
%matplotlib inline import matplotlib.pyplot as plt import random import pandas as pd import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題 #數據準備 date=["一月","二月","三月","四月","五月","六月","七月","八月"] sales=[random.randint(10000,25000) for i in range(8)] cost=[int(i/100)-random.randint(1,20) for i in sales] df=pd.DataFrame(data={"銷量":sales,"成本":cost},index=date) #繪制第一個Y軸 fig=plt.figure(figsize=(20,8),dpi=80) ax=fig.add_subplot(111) lin1=ax.plot(df.index,df["銷量"],marker="o",label="sales") ax.set_title("雙Y軸圖",size=20) ax.set_xlabel("時間",size=18) ax.set_ylabel("銷量(件)",size=18) for i,j in df["銷量"].items(): ax.text(i,j+20,str(j),va="bottom",ha="center",size=15) #繪制另一Y軸 ax1=ax.twinx() lin2=ax1.plot(df.index,df["成本"],marker="o",color="red",label="cost") ax1.set_ylabel("成本(元)",size=18) #合并圖例 lins=lin1+lin2 labs=[l.get_label() for l in lins] ax.legend(lins,labs,loc="upper left",fontsize=15) plt.show()
圖像效果如下圖:
以上就是“Python+Matplotlib怎么繪制雙y軸圖像”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。