Pandas绘制多DataFrame时其中一个呈平线的问题求助
解决双DataFrame同图绘图仅显示一组数据的问题
嘿,这个坑我之前踩过!你遇到的情况几乎可以肯定是两个数据集的数值量级差异过大导致的——想想看,GDP的总和肯定比足球相关的Amount大上好几个数量级对吧?当你把它们放在同一个y轴上绘制时,GDP的曲线会被压缩到y轴底部,看起来就像一条平线,而量级小的足球数据则占据了整个y轴的显示范围。
验证原因
你可以先打印两个数据集的最大值确认一下:
print("GDP最大值:", gdpgraph['sum'].max()) print("足球数据最大值:", graphsoccer['sum'].max())
不出意外的话,你会看到两者的数值差了至少好几个零。
解决方案1:使用双y轴(最推荐)
给两个数据集分别分配左右两个y轴,这样各自的数值范围都能正常展示,不会互相挤压:
import matplotlib.pyplot as plt fig, ax1 = plt.subplots() # 绘制GDP数据,绑定左y轴 color = 'tab:blue' ax1.set_xlabel('Year') ax1.set_ylabel('GDP Total', color=color) # 确保年份索引对应,直接调用plot方法 gdpgraph['sum'].plot(ax=ax1, color=color, label='GDP') ax1.tick_params(axis='y', labelcolor=color) ax1.legend(loc='upper left') # 创建右y轴,绘制足球数据 ax2 = ax1.twinx() color = 'tab:orange' ax2.set_ylabel('Soccer Amount Total', color=color) graphsoccer['sum'].plot(ax=ax2, color=color, label='Soccer Amount') ax2.tick_params(axis='y', labelcolor=color) ax2.legend(loc='upper right') # 调整布局防止标签重叠 fig.tight_layout() plt.show()
解决方案2:对数变换(适合展示趋势对比)
如果只需要对比两者的变化趋势,不需要精确数值,可以对量级大的数据集做对数变换,缩小量级差距:
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots() # 对GDP总和取自然对数 ax.plot(gdpgraph.index, np.log(gdpgraph['sum']), label='GDP (Log Scale)') ax.plot(graphsoccer.index, graphsoccer['sum'], label='Soccer Amount') ax.set_xlabel('Year') ax.set_ylabel('Value') ax.legend() plt.show()
这样调整之后,两个数据集的曲线就都能正常显示啦!
内容的提问来源于stack exchange,提问作者Spanhaak
相关产品推荐
相关产品推荐

