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
相关产品推荐
相关产品推荐

