双坐标图一般用于我们展示多维数据,常见的方式是共享x轴,左右两边Y轴刻度不一样或者按照比例缩放。matplotlib作为python绘图主要工具,绘制双坐标图也非常简单。

此处利用公开的数据集(美国economics数据集)做演示:


import pandas as pd
import matplotlib.pyplot as plt

# 导入数据
df = pd.read_csv("economics.csv")

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

# 绘制折线图(左Y轴)
fig, ax1 = plt.subplots(1,1,figsize=(16,9), dpi= 80)
ax1.plot(x, y1, color='tab:red')

# 绘制折线图(右Y轴)
ax2 = ax1.twinx()  # 共享X轴
ax2.plot(x, y2, color='tab:blue')

# 坐标轴样式
# 左Y轴
ax1.set_xlabel('Year', fontsize=20) # 设置x轴标签
ax1.tick_params(axis='x', rotation=0, labelsize=12) # 设置刻度
ax1.set_ylabel('Personal Savings Rate', color='tab:red', fontsize=20) # 设置y轴标签
ax1.tick_params(axis='y', rotation=0, labelcolor='tab:red' )
ax1.grid(alpha=.4) # 设置网格参数

# 右Y轴
ax2.set_ylabel("# Unemployed (1000's)", color='tab:blue', fontsize=20)
ax2.tick_params(axis='y', labelcolor='tab:blue')
ax2.set_xticks(np.arange(0, len(x), 60))
ax2.set_xticklabels(x[::60], rotation=90, fontdict={'fontsize':10})
ax2.set_title("Personal Savings Rate vs Unemployed: Plotting in Secondary Y Axis", fontsize=22)
fig.tight_layout()
plt.show()

更多的绘图方法下面参考资料给出了详尽的示例包括代码,建议学习。

参考资料:

1.https://www.machinelearningplus.com/plots/top-50-matplotlib-visualizations-the-master-plots-python