求助:柱状图上叠加折线图时折线无法显示的问题
解决柱状图上叠加折线图不显示的问题
嘿,我明白你碰到的麻烦了——想把折线图叠在柱状图上,但折线愣是没出来对吧?这问题其实挺常见的,主要是两个原因:一是你没让折线图和柱状图共用同一个坐标轴,二是ratio的数值范围(0-1)和柱状图的计数(上千)差得太远,就算显示了也几乎看不到。
先给你完整的解决方案,一步步来:
1. 先整理好你的DataFrame
看起来你给出的DataFrame格式有点小问题,我先帮你修正并把年份列设为索引,这样x轴才能正确显示年份:
import pandas as pd import matplotlib.pyplot as plt # 构建正确的DataFrame data = { 'meh': [2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016], 'fiches': [1412, 1356, 1394, 1352, 1398, 1261, 1144, 1203, 1024, 1197], 'another_col': [1338, 1324, 1298, 1275, 1325, 1215, 845, 1167, 1004, 1180], 'ratio': [0.947592, 0.976401, 0.931133, 0.943047, 0.947783, 0.963521, 0.738636, 0.970075, 0.980469, 0.985798] } graph = pd.DataFrame(data).set_index('meh')
2. 绘制共用坐标轴的双y轴图
核心是让折线图绑定到柱状图的坐标轴上,同时用双y轴适配不同的数值范围:
# 第一步:绘制柱状图,获取主坐标轴 ax = graph[['fiches', 'another_col']].plot(kind='bar', color=['#666666','#999999'], figsize=(10,6)) ax.set_ylabel('Counts') # 主y轴标签 # 第二步:创建次坐标轴,绘制折线图 ax2 = ax.twinx() # 生成和主轴共享x轴的次轴 graph['ratio'].plot(kind='line', color='red', linestyle='-', marker='o', ax=ax2) ax2.set_ylabel('Ratio') # 次y轴标签 ax2.set_ylim(0, 1.1) # 手动调整次轴范围,让折线显示更清晰 # 最后美化一下 plt.title('Yearly Counts & Ratio') plt.tight_layout() # 自动调整布局,避免标签被截断 plt.show()
为什么你的原代码不行?
你之前的代码里,第二个plot()没有指定ax=ax参数,所以pandas默认新建了一个独立的绘图窗口,折线图和柱状图根本不在同一个图里。就算你强制把它们放一个轴,ratio的小数值也会被柱状图的大数值压到底部,几乎看不见——双y轴就是解决这个问题的最佳方式。
内容的提问来源于stack exchange,提问作者Martin B
相关产品推荐
相关产品推荐

