如何在Matplotlib每个子图中绘制axline直线
解决Matplotlib子图添加斜率1直线报错的问题
问题根源
你遇到的'AxesSubplot' object has no attribute 'axline'错误,核心原因是你的Matplotlib版本低于3.3.0——axline是Matplotlib 3.3.0版本才新增的API,低版本的Axes对象没有这个方法。
两种解决方案
1. 升级Matplotlib版本
直接把Matplotlib升级到3.3.0及以上,就能正常使用axline方法:
# pip 用户 pip install --upgrade matplotlib # conda 用户 conda update matplotlib
升级后,遍历子图调用axline的写法就能正常运行,示例代码:
import matplotlib.pyplot as plt import numpy as np fig, axes = plt.subplots(2, 2) for ax in axes.flat: # 绘制散点图 x = np.random.rand(50) y = np.random.rand(50) ax.scatter(x, y) # 添加斜率为1的直线 ax.axline((0, 0), slope=1, color='red', linestyle='--') plt.show()
2. 不升级版本,用plot方法替代
如果无法升级,可通过计算坐标轴范围,用plot方法手动绘制斜率为1的直线:
import matplotlib.pyplot as plt import numpy as np fig, axes = plt.subplots(2, 2) for ax in axes.flat: # 绘制散点图 x = np.random.rand(50) y = np.random.rand(50) ax.scatter(x, y) # 获取当前子图的坐标轴范围 x_min, x_max = ax.get_xlim() y_min, y_max = ax.get_ylim() # 计算直线的起止点(保证直线覆盖子图可视区域) line_start = min(x_min, y_min) line_end = max(x_max, y_max) # 绘制斜率为1的直线 ax.plot([line_start, line_end], [line_start, line_end], color='red', linestyle='--') plt.show()
关于三种写法报错的说明
- 前两种写法报错:因为低版本Matplotlib的Axes对象没有
axline属性,跟调用时机无关 - 第三种写法报错:
axes是numpy数组对象,本身没有axline方法,必须遍历数组中的每个Axes子图对象单独调用方法
内容的提问来源于stack exchange,提问作者alexwhitworth
相关产品推荐
相关产品推荐

