Matplotlib绘图坐标轴出现额外[0,1.0]刻度的原因及解决咨询
问题原因及解决方法
核心原因
你的代码存在两个关键问题,导致出现叠加的[0,1.0]刻度:
- 重复创建子图:你先用
plt.subplots()创建了包含子图的figure,随后又通过figure.add_subplot()再次添加子图,这会导致两个子图重叠显示——其中plt.subplots()生成的空轴默认刻度范围就是[0,1.0],和你后续绘制的轴叠加后就出现了双刻度。 - 语法错误:调用
create_plot时存在多余的右括号,导致代码逻辑异常。
解决方法
修正代码逻辑,避免重复创建子图
直接使用plt.subplots()返回的Axes对象来绘图,不需要再调用add_subplot:
import pandas as pd import matplotlib.pyplot as plt def create_plot(data: pd.DataFrame, ax): ax.plot(data.col1, data.col2, color="#39915d", marker="o") return ax files = ("file1",) # 获取subplots返回的figure和axes数组 figure, axes = plt.subplots(ncols=len(files), nrows=1) # 处理单文件的情况,确保axes是可迭代对象 if len(files) == 1: axes = [axes] for i, file in enumerate(files): get_file(file) data = get_data(file) create_plot(data, axes[i]) plt.show()
如果你坚持使用add_subplot的方式
需要删除plt.subplots()中创建子图的逻辑,直接从空figure开始添加:
import pandas as pd import matplotlib.pyplot as plt def create_plot(data: pd.DataFrame, figure, plotIndex): ax = figure.add_subplot(*plotIndex) ax.plot(data.col1, data.col2, color="#39915d", marker="o") return figure files = ("file1",) # 创建空figure,不生成子图 figure = plt.figure() for i, file in enumerate(files): get_file(file) data = get_data(file) # 修正语法错误,移除多余的右括号 create_plot(data, figure, (1, len(files), i+1)) plt.show()
额外排查点(针对WSL+VcXsrv环境)
如果修正代码后仍有问题,可检查:
- 确保VcXsrv启动时勾选了
Disable access control选项,避免显示异常 - 确认环境变量
DISPLAY设置正确(通常为:0),可通过echo $DISPLAY验证
内容的提问来源于stack exchange,提问作者Guilty
相关产品推荐
相关产品推荐

