Pandas绘图轴反转及CSV数据绘图日期轴配置问题
没问题,我来帮你搞定这两个问题,先从通用的坐标轴反转方法说起,再针对你的新冠数据绘图问题给出具体的解决方案:
1. 如何反转Pandas绘图的坐标轴?
Pandas绘图基于Matplotlib,我们可以通过两种简单方式实现坐标轴反转:
方式一:使用轴对象的反转方法
绘图后获取Axes对象,调用invert_xaxis()或invert_yaxis()就能快速反转对应坐标轴:
import pandas as pd import matplotlib.pyplot as plt # 示例数据 df = pd.DataFrame({'x': [1, 2, 3, 4], 'y': [10, 20, 15, 25]}) # 绘图并获取轴对象 ax = df.plot() # 反转x轴(从大到小显示) ax.invert_xaxis() # 反转y轴(从高到低显示) # ax.invert_yaxis() plt.show()
方式二:手动设置坐标轴范围
如果需要更精细的控制,可以直接指定坐标轴的起始和结束值,实现反转效果:
ax = df.plot() # 反转x轴:把最大值放在左边,最小值放在右边 ax.set_xlim(df['x'].max(), df['x'].min()) plt.show()
2. 解决伊利诺伊州新冠数据绘图的x轴显示与顺序问题
你的问题核心是日期列未被解析为日期类型,以及原始数据按最新日期在前排列导致折线顺序不符合预期。下面是修正后的完整代码和关键步骤解释:
修正后的代码
import pandas as pd import os import matplotlib.pyplot as plt os.chdir('/Users/acan/Downloads') # 读取CSV时直接解析date列为datetime类型,避免后续额外处理 il_corona = pd.read_csv('illinois-history.csv', parse_dates=['date']) # 筛选需要的列,并按日期升序排序(旧日期在前,新日期在后) il_corona1 = il_corona[['date', 'death']].sort_values(by='date') # 指定x轴为date列,绘制折线图 ax = il_corona1.plot(x='date', y='death') # 调整x轴日期标签的角度,避免重叠 plt.xticks(rotation=45) # 自动调整布局,防止标签被图表边缘截断 plt.tight_layout() plt.show()
关键步骤说明
parse_dates=['date']:让Pandas自动识别date列为日期类型,这样绘图时会显示实际日期文本,而非默认的行号(距今天数)。sort_values(by='date'):原始CSV的数据是按最新日期在前排列的,排序后旧日期会出现在图表左侧,新日期在右侧,折线就会呈现从左到右上升的趋势。plt.xticks(rotation=45)和plt.tight_layout():解决日期标签过多导致重叠的问题,让图表更易读。
如果你习惯用索引作为x轴,也可以把date设为索引后再绘图,效果完全一致:
il_corona1 = il_corona[['date', 'death']].sort_values(by='date').set_index('date') il_corona1.plot() plt.xticks(rotation=45) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者ACan
相关产品推荐
相关产品推荐

