Python Pandas 无表头DataFrame调用plot()绘制折线图咨询
实现方法
基础折线图绘制
你原有代码存在两个语法/参数错误:
df.plot()的x、y参数接收列名或列名列表,不支持直接传入切片得到的数组,且[0:346,1:49]不是合法的Python切片写法- 日期列未做类型转换、也未指定为绘图轴,容易出现x轴格式错乱问题
先做基础数据预处理,再绘图即可:
import pandas as pd import matplotlib.pyplot as plt # 列重命名:第一列为日期列,后续48列按1-48命名,和你的数据结构匹配 df.columns = ['date'] + list(range(1, 49)) # 把日期列转为标准时间格式 df['date'] = pd.to_datetime(df['date']) # 最简写法:将日期列设为索引,pandas会自动把索引作为x轴,所有数值列绘制为折线 df_set = df.set_index('date') df_set.plot(kind='line', figsize=(12, 6)) plt.tight_layout() plt.show() # 不设索引的写法:手动指定x轴列和要绘制的y轴列 df.plot(x='date', y=list(range(1, 49)), kind='line', figsize=(12, 6)) plt.show()
不需要手动传入行切片,只要传入的DataFrame是你需要绘制的全量346行数据,pandas会自动遍历所有行绘图。
多坐标轴配置支持
pandas原生支持双y轴配置,3个及以上y轴可以结合matplotlib的轴对象手动实现:
- 双y轴示例:将前24列放在左轴,后24列放在右次轴
ax = df[list(range(1,25))].plot(figsize=(12,6)) # 传入已有轴对象,指定secondary_y=True即可将曲线绘制在次坐标轴 df[list(range(25,49))].plot(ax=ax, secondary_y=True) plt.tight_layout() plt.show()
- 3个及以上y轴示例:手动创建偏移坐标轴避免重叠
fig, ax = plt.subplots(figsize=(12,6)) # 调整画布右侧边距,给多出来的轴预留显示空间 fig.subplots_adjust(right=0.8) # 第一个轴(默认左侧)绘制1-16列 df[list(range(1,17))].plot(ax=ax) ax.set_ylabel('1-16列数值') # 第二个轴(右侧第一个位置)绘制17-32列 ax2 = ax.twinx() df[list(range(17,33))].plot(ax=ax2, colormap='Set2') ax2.set_ylabel('17-32列数值') # 第三个轴(右侧偏移位置)绘制33-48列 ax3 = ax.twinx() df[list(range(33,49))].plot(ax=ax3, colormap='Set3') ax3.set_ylabel('33-48列数值') # 将第三个轴向右偏移8%的画布宽度,避免和第二个轴重叠 ax3.spines.right.set_position(("axes", 1.08)) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Milo
相关产品推荐
相关产品推荐

