繪製雙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)
plot_l = ax1.plot(x,y1,color = 'tab:red')

4.繪製右側曲線

ax2 = ax1.twinx()
plot_r = 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})

6.新增圖例

plt.legend([plot_l[0],plot_r[0]],['儲蓄率','失業人數'],
           frameon = False,
           framealpha = 1,
           ncol = 2,
           shadow = True,
           borderpad = 1,
           loc = 'upper right')
plt.show()

plt.legend() 函式簡介:
plt.legend() 函式用於顯示圖表中的圖例。圖例是圖表中用來解釋不同資料系列的標記,通常包括線條樣式、顏色和標籤。以下是一些關於plt.legend()函式的關鍵點:

  • 位置:可以透過位置引數(loc)來指定圖例的位置。常用的位置引數包括:
    "best":自動選擇最不干擾圖表的位置。
    "upper right":右上角。
    "upper left":左上角。
    "lower left":左下角。
    "lower right":右下角。
    "center":中心位置。

  • 圖例樣式:可以透過prop引數來指定圖例中文字的屬性,如字型大小、顏色等。

  • 標題:可以透過title引數來為圖例新增標題。

  • 邊框:可以透過frameon引數來控制是否顯示圖例邊框。

  • 陰影:可以透過shadow引數來給圖例新增陰影效果。

  • 圖例項:如果需要手動指定圖例中的項,可以在呼叫繪圖函式時使用label引數為每個資料系列指定標籤。

輸出結果展示:
image

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

##(2)匯入資料
path=r'D:\05工作記錄\工作薄\python\Python資料分析\data\economics.csv'
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)
plot_l = ax1.plot(x,y1,color = 'tab:red')

## (4)繪製右側曲線
ax2 = ax1.twinx()
plot_r = 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})

##(6)新增圖例
plt.legend([plot_l[0],plot_r[0]],['儲蓄率','失業人數'],
           frameon = False,
           framealpha = 1,
           ncol = 2,
           shadow = True,
           borderpad = 1,
           loc = 'upper right')

plt.show()

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

相關文章