Matplotlib图表坐标轴出现额外标记问题排查与解决请求
解决Matplotlib营收实际值与预测值对比图的轴额外标记问题
问题原因分析
- 轴范围设置顺序错误:你先调用
plt.xlim()和plt.ylim()设置轴范围,之后再绘制数据。Matplotlib默认会根据数据的实际范围自动调整轴刻度,这会覆盖你提前设置的范围,导致出现额外标记。 - 重复创建轴对象:代码中
ax = plt.axes()会创建一个新的坐标轴对象,和当前figure的默认轴产生冲突,进一步导致轴设置混乱。
解决方案
方案1:调整代码顺序,先绘图再设置轴范围
将轴范围设置的代码放在绘图之后,确保Matplotlib不会覆盖你的自定义范围:
import matplotlib.pyplot as plt import numpy as np # 假设df1已正确定义 plt.figure(figsize=(13,7)) fontsize = 15 plt.title("Nonlinear Extrapolation of Revenues - Actual vs. Forecast", fontsize=fontsize) # 先提取数据并完成绘图 Actual = np.array(df1.Actual1) Forecast = np.array(df1['Forecast Fit']) plt.plot(Forecast, marker='o', color="green", label="Forecast") plt.plot(Actual, marker='o', color="blue", label="Actual") # 绘图完成后设置轴范围 plt.xlim(0, 18) plt.ylim(-500, 3000) plt.legend(loc="center right") plt.show()
方案2:手动指定x轴坐标(针对数据长度超出x范围的情况)
如果你的Actual或Forecast数据长度超过18,Matplotlib会自动将x轴延伸到数据的最大索引。此时可以手动指定x轴的数值,严格控制x轴范围:
import matplotlib.pyplot as plt import numpy as np # 假设df1已正确定义 plt.figure(figsize=(13,7)) fontsize = 15 plt.title("Nonlinear Extrapolation of Revenues - Actual vs. Forecast", fontsize=fontsize) Actual = np.array(df1.Actual1) Forecast = np.array(df1['Forecast Fit']) # 手动生成x轴坐标,确保长度匹配数据 x = np.arange(len(Actual)) plt.plot(x, Forecast, marker='o', color="green", label="Forecast") plt.plot(x, Actual, marker='o', color="blue", label="Actual") plt.xlim(0, 18) plt.ylim(-500, 3000) plt.legend(loc="center right") plt.show()
额外检查点
- 确认
df1.Actual1和df1['Forecast Fit']的数据长度是否在0-18范围内,如果数据本身包含超出该范围的索引或值,也会导致轴标记异常。 - 移除多余的
ax = plt.axes()语句,避免轴对象冲突。
内容的提问来源于stack exchange,提问作者Mijul Saxena
相关产品推荐
相关产品推荐

