繪製雙Y軸圖

海唤鱼發表於2024-07-17

1.匯入資料庫

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']

2.匯入資料

path=r'path'
df = pd.read_csv(path)
x = df['date']
y1 = df['psavert']
y2 = df['unemploy']

3.繪製左側曲線

fig,ax1 = plt.subplots(1,1,figsize = (16,7),dpi = 80)
ax1.plot(x,y1,color = 'tab:red')

4.繪製右側曲線

ax2 = ax1.twinx()
ax2.plot(x,y2,color = 'tab:blue')

ax2 = ax1.twinx()函式簡介:

在Matplotlib中,ax1.twinx() 方法用於建立一個共享x軸的第二個軸(ax2),這在需要在同一個圖表上展示兩個不同尺度或度量的資料時非常有用。這種方法常用於建立雙y軸圖表,其中一個軸顯示左側y軸的資料,另一個軸顯示右側y軸的資料。以下是使用 ax1.twinx() 方法建立雙y軸圖表的基本步驟:

  • 建立主軸:首先,建立一個主軸(ax1),並在其上繪製資料。
  • 建立第二個軸:使用 ax1.twinx() 方法建立第二個軸(ax2),這個軸將共享 ax1 的x軸。
  • 在第二個軸上繪製資料:在 ax2 上繪製第二組資料,通常使用不同的y軸刻度。
  • 設定第二個軸的刻度和標籤:為 ax2 設定合適的刻度、標籤和標題。

5.設定座標軸

ax1.set_xlabel('日期',fontsize = 16)
ax1.set_ylabel('儲蓄率',color = 'tab:red',fontsize = 16)
ax1.tick_params(axis = 'y',rotation = 0,labelcolor = 'tab:red')

ax2.set_ylabel('失業人數(1000)',color = 'tab:blue',fontsize = 16)
ax2.tick_params(axis = 'y',labelcolor = 'tab:blue')

ax2.set_title('儲蓄率vs失業率',fontsize = 16)
ax2.set_xticks(np.arange(0,len(x),60))
ax2.set_xticklabels(x[::60],rotation = 90,fontdict = {'fontsize':10})
plt.show()

輸出結果展示:
image

完整程式碼
## (1)匯入資料庫
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']

##(2)匯入資料
path=r'path'
df = pd.read_csv(path)

x = df['date']
y1 = df['psavert']
y2 = df['unemploy']

##(3)繪製左側曲線
fig,ax1 = plt.subplots(1,1,figsize = (16,7),dpi = 80)
ax1.plot(x,y1,color = 'tab:red')

## (4)繪製右側曲線
ax2 = ax1.twinx()
ax2.plot(x,y2,color = 'tab:blue')

## (5)設定座標軸
ax1.set_xlabel('日期',fontsize = 16)
ax1.set_ylabel('儲蓄率',color = 'tab:red',fontsize = 16)
ax1.tick_params(axis = 'y',rotation = 0,labelcolor = 'tab:red')

ax2.set_ylabel('失業人數(1000)',color = 'tab:blue',fontsize = 16)
ax2.tick_params(axis = 'y',labelcolor = 'tab:blue')

ax2.set_title('儲蓄率vs失業率',fontsize = 16)
ax2.set_xticks(np.arange(0,len(x),60))
ax2.set_xticklabels(x[::60],rotation = 90,fontdict = {'fontsize':10})
plt.show()

說明:該案例來源於《Python資料分析》

相關文章