Matplotlib修改X轴为收盘价后图表显示异常求助
问题原因与解决方法
原因分析
把X轴设置为收盘价后图表异常,核心问题在于:收盘价是数值型数据,直接作为X轴时,matplotlib会将每个数据点的X坐标映射为收盘价的数值,导致数据点按收盘价大小排序,而非原本的序列(或时间)顺序,最终线条错乱。
解决步骤
统一数据索引
确保所有指标(curta、longa、Close)都属于同一个DataFrame(即src),保证它们的索引完全一致,这样每个数据点的X(收盘价)和Y(均线值)才能一一对应。正确指定X-Y对应关系
修改绘图代码,明确将收盘价作为X轴,对应均线作为Y轴,而非只传入Y序列:
# 替换原绘图代码 plot.plot(src["Close"], src["media"], label="Media", color="gray") plot.plot(src["Close"], src["curta"], label="Curta", color="green", linewidth=1) plot.plot(src["Close"], src["longa"], label="Longa", color="red", linewidth=1)
(原代码里plot.plot(0,...)是画y=0的水平线,若不需要可删除;若保留,改为plot.axhline(y=0, label="Media", color="gray")更规范)
- 优先使用时间索引做X轴
如果你的数据是时间序列,建议用时间索引作为X轴,这样图表会按时间顺序展示,更符合金融数据的分析逻辑:
# 用时间索引做X轴 plot.plot(src.index, src["curta"], label="Curta", color="green", linewidth=1) plot.plot(src.index, src["longa"], label="Longa", color="red", linewidth=1)
原问题相关信息
未设置X轴时,图表显示正常:
设置X轴为收盘价后,图表显示异常:
相关代码:
src["media"] = media src["longa"] = longa src["curta"] = curta src["Close"] = close plot.plot(0,label="Media",color="gray") plot.plot(curta,label="Curta",color="green",linewidth=1) plot.plot(longa,label="Longa", color="red", linewidth=1) trendColor = (np.where(src['curta'] > (src['longa']),'lime', 'orange')) src["trendColor"] = trendColor print(curta) plot.show() plot.legend()
内容的提问来源于stack exchange,提问作者BEKA-0101
相关产品推荐
相关产品推荐

