如何在同一柱状图中使用双Y轴绘制两个变量
双Y轴同图绘制柱状图实现方法
你可以借助matplotlib的twinx()接口生成共享X轴的第二个Y轴,同时调整两个柱状图的横向位置避免重叠,完整实现代码如下:
import matplotlib.pyplot as plt # 1. 预计算统计结果,不直接绘图 genre_counts = df.name.value_counts()[:5] lang_counts = lang.original_language.value_counts()[:5] bar_width = 0.35 # 单根柱状图的宽度 # 2. 创建画布与第一个Y轴 fig, ax1 = plt.subplots(figsize=(10, 6)) # 3. 在第一个Y轴绘制体裁柱状图,使用pandas原生plot接口,指定位置右偏 genre_counts.plot( kind='bar', ax=ax1, width=bar_width, position=1, color='#1f77b4', label='体裁数量' ) ax1.set_ylabel('体裁出现次数', color='#1f77b4') ax1.tick_params(axis='y', labelcolor='#1f77b4') ax1.set_xlabel('分类') # 4. 生成共享X轴的第二个Y轴 ax2 = ax1.twinx() # 5. 在第二个Y轴绘制语言柱状图,指定位置左偏 lang_counts.plot( kind='bar', ax=ax2, width=bar_width, position=0, color='#ff7f0e', label='语言数量' ) ax2.set_ylabel('语言出现次数', color='#ff7f0e') ax2.tick_params(axis='y', labelcolor='#ff7f0e') # 6. 合并双轴图例、调整布局 fig.legend(loc='upper right', bbox_to_anchor=(1,1), bbox_transform=ax1.transAxes) plt.xticks(rotation=45, ha='right') plt.tight_layout() plt.show()
关键参数说明
position:pandas柱状图的位置参数,取值范围0~1,两个序列分别设为0和1即可自动错开位置,避免重叠twinx():matplotlib提供的接口,可生成和原坐标系共享X轴、独立Y轴的新坐标系,实现双Y轴效果bar_width:单根柱状图的宽度,建议设置为小于0.5,避免两个柱状图总宽度超过1个X轴刻度间距导致重叠
内容的提问来源于stack exchange,提问作者Sylwi
相关产品推荐
相关产品推荐

