Matplotlib绘制值与数据集不符问题求助
Matplotlib绘图值与数据集不匹配的问题排查与修复
问题描述
尝试绘制数据集中的随机行,数据集包含不同日期收集的数据,已将x轴设置为指定日期且无插值,但Matplotlib绘制的值与数据集中的条目值不匹配,趋势和数值偏差极大。相关代码如下:
# 创建整数类型的日期数组 flat_Dates_dates = flat_Dates[2:7] flat_Dates_dates # 输出:[20220620, 20220624, 20220627, 20220701, 20220708] # 转换为pandas DatetimeIndex,避免日期插值 date_obj_pd = pd.to_datetime(flat_Dates_dates, format=("%Y%m%d")) # 输出:DatetimeIndex(['2022-06-20', '2022-06-24', '2022-06-27', '2022-07-01', '2022-07-08'], dtype='datetime64[ns]', freq=None)
注:x轴为date_obj_pd,y轴为数据集对应的pandas DataFrame行。
可能的问题原因
- x与y数据索引/长度不匹配:
date_obj_pd长度为5,但如果y轴选取的DataFrame行/列长度不符,或索引未对齐,会导致数据错位映射 - y轴数据选择错误:误选了整列而非目标行,或行索引指定错误,导致绘制了非预期的数据
- 数据类型异常:y轴数据为字符串类型,Matplotlib自动转换时出现数值偏差
- 日期轴隐式处理问题:Matplotlib对datetime轴的自动定位逻辑,可能导致数据点与日期的对应关系错乱
修复方法
严格对齐x与y的索引
将date_obj_pd设置为目标数据的索引,确保一一对应:# 假设target_row是你要绘制的DataFrame行 target_row.index = date_obj_pd target_row.plot(marker='o', rot=45)明确指定x、y对应数据
绘图时直接传入一一对应的数组,避免隐式索引匹配:import matplotlib.pyplot as plt # 选取DataFrame的目标行(比如第3行) y_values = df.iloc[2].values # 绘制时绑定x和y plt.plot(date_obj_pd, y_values, marker='o') plt.xticks(rotation=45) plt.show()检查并修正数据类型
确保y轴数据为数值类型:# 将DataFrame转换为数值类型,无法转换的设为NaN df = df.apply(pd.to_numeric, errors='coerce')强制关闭日期插值
手动设置x轴定位器,仅显示指定日期:plt.plot(date_obj_pd, y_values, marker='o') # 固定x轴刻度为指定日期 plt.gca().xaxis.set_major_locator(plt.FixedLocator(date_obj_pd)) plt.xticks(rotation=45) plt.show()
内容的提问来源于stack exchange,提问作者lambda
相关产品推荐
相关产品推荐

