You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib分轴并列图表不显示仅弹出空白窗口如何排查

问题根源

代码运行后显示空白、无法实现并排分栏效果,核心是mpl.axes()的参数使用逻辑错误:

  • axes()接收的四元组参数[left, bottom, width, height]是相对于整张画布的归一化比例值,取值范围必须在0到1之间,代表子图边缘距离画布左、下边缘的距离,以及子图自身的宽高占比,和你要展示的股价、日期等实际业务数据没有任何关系。你传入的15000、17000这类远大于1的数值,会把子图直接放到画布可视区域之外,自然只能看到空白窗口。
  • 你两次调用axes()传入了完全相同的位置参数,就算数值合法,两个子图也会完全重叠,根本达不到并排分栏的效果。
修复方案

推荐使用matplotlib官方的subplots()接口创建子图网格,不需要手动计算位置,代码可读性和可维护性更高:

from matplotlib import pyplot as plt
import pandas as pd

data_better = pd.read_csv('What.csv')
# 先将日期列转为时间格式,避免x轴标签被识别为字符串导致挤成一团
data_better["Date"] = pd.to_datetime(data_better["Date"])

# 创建1行2列的并排子图,设置合适的画布尺寸
fig, (ax_open, ax_close) = plt.subplots(1, 2, figsize=(12, 5))

# 绘制开盘价子图
ax_open.plot(data_better["Date"], data_better["Open"])
ax_open.set_title("Open Values")
ax_open.set_ylabel("Money")
ax_open.tick_params(axis='x', rotation=45) # 旋转日期标签避免重叠

# 绘制收盘价子图
ax_close.plot(data_better["Date"], data_better["Close"], color='orange')
ax_close.set_title("Close Values")
ax_close.set_ylabel("Money")
ax_close.tick_params(axis='x', rotation=45)

# 自动调整子图间距,防止标题、轴标签被画布边缘截断
plt.tight_layout()
plt.show()

如果你需要用手动指定axes位置的写法,把参数替换为0-1区间的比例值,将两个子图的位置错开即可:

from matplotlib import pyplot as plt
import pandas as pd

data_better = pd.read_csv('What.csv')
data_better["Date"] = pd.to_datetime(data_better["Date"])

# 左子图:距离画布左边缘10%位置,占35%宽度
plt.axes([0.1, 0.15, 0.35, 0.7])
plt.title("Open Values")
plt.plot(data_better["Date"], data_better["Open"])
plt.ylabel("Money")
plt.xticks(rotation=45)

# 右子图:距离画布左边缘55%位置,和左图预留10%的空隙,宽高和左图对齐
plt.axes([0.55, 0.15, 0.35, 0.7])
plt.title("Close Values")
plt.plot(data_better["Date"], data_better["Close"], color='orange')
plt.ylabel("Money")
plt.xticks(rotation=45)

plt.show()

补充提示:读取股票类时间序列数据后,必须先将日期列转为标准时间格式,否则matplotlib会把日期当成普通字符串渲染,x轴刻度会出现重叠、顺序错乱的问题。

内容的提问来源于stack exchange,提问作者Licheng Zheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:39:19