Python可视化:双y轴图
9 个月前
Python可视化:双y轴图
「—matplotlib绘制双y轴图」
内容概要
想要在一个图形上形象地展示两个数量级差别较大的数据的变化趋势时,双 y 轴图是一个很好的选择,它能确保某个变量的变化趋势不会被另一个变量所影响。
本期内容将介绍如何使用 matplotlib 绘制双 y 轴图,将两类有数量级差别的数据分别绘制柱状图和折线图,展示在同一张图形上,并后续对图形的轴线,轴刻度,标签,标题等元素进行自定义美化。需要本案例数据和完整代码的见个人介绍获取即可。
绘图数据
导入所需第三方库,读取绘图数据:
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' #设置绘图字体为微软雅黑
df = pd.read_excel('doubley.xlsx')
print(df)
绘图数据输出结果:
绘图代码
在matplotlib中使用
q = ax.twinx()
来定义一个额外坐标轴对象,其和ax共用x轴,但具有不同的y轴,从而实现绘制双y轴图:
temperatureColor = "#69b3a2"
priceColor = (0.2, 0.6, 0.9, 1)
x = df['day']
temp = df['temperature']
price = df['price']
fig, ax = plt.subplots(figsize=(9,6))
p = ax.twinx() # 包含另一个y轴的坐标轴对象
# 绘制柱状图和折线图
ax.bar(x,temp,color=temperatureColor,edgecolor='k',zorder=5,alpha=0.6)
p.plot(x,price,color=priceColor,zorder=5,linewidth=2)
plt.show()
绘图结果:
调整美化图形,
# 调整x、y轴刻度
ax.set_xticks(ticks=['2019-01-01','2019-01-15','2019-02-01','2019-02-15','2019-03-01','2019-03-15','2019-04-01','2019-04-15'])
ax.set_xticklabels(['Jan','','Feb','','Mar','','Apr',''],fontsize=13)
ax.tick_params(axis='y',labelsize=13,labelcolor=temperatureColor,color=temperatureColor)
# 设置x、y轴的轴名
ax.set_ylabel('Temperature(Celsius °)',c=temperatureColor,fontsize=14,loc='top')
ax.set_xlabel('Day',fontsize=14)
# 设置左轴宽度及颜色,使其和temperature绘图颜色保持一致
ax.spines['left'].set_linewidth(1.5)
ax.spines['left'].set_color(temperatureColor)
p.spines['left'].set_color(temperatureColor)
# 设置两个y轴范围,及右侧y轴的颜色、宽度和轴名
ax.set_ylim(-0.2,11)
p.set_ylim(-2,110)
p.set_ylabel('Price($)',c=priceColor,fontsize=14,loc='top')
p.tick_params(axis='y',labelsize=13,labelcolor=priceColor,color=priceColor)
ax.spines['right'].set_color(priceColor)
p.spines['right'].set_color(priceColor)
p.spines['right'].set_linewidth(1.5)
# 设置网格线和标题
ax.grid(alpha=0.3,color='grey')
ax.set_title(x=0.21,y=1.01,label='Temperature up, price down',fontsize=15,color='grey',fontweight='bold')