在matplotlib坐标轴范围内添加x=y(45度)线
我有一个图表,x轴和y轴的范围不一样:
fig, ax = subplots(ncols=1)
ax.set_xlim([0, 10])
ax.set_ylim([5, 10])
我想在这个图表上加一条 x=y
的线,但希望这条线能保持在坐标轴的范围内。
我第一次尝试的方法很简单,就是这样:
ax.plot(ax.get_xlim(), ax.get_xlim())
虽然我改进后的尝试可以实现,但代码看起来非常糟糕:
ax.plot([max(ax.get_xlim()[0], ax.get_ylim()[0]),
min(ax.get_xlim()[1], ax.get_ylim()[1])],
[max(ax.get_xlim()[0], ax.get_ylim()[0]),
min(ax.get_xlim()[1], ax.get_ylim()[1])])
有没有更好的方法呢?
我在 Spyder 2.2.5
中使用 IPython 版本 1.2.1
,并且使用的 Matplotlib 版本是 1.3.1
,运行 mpl.get_backend()
返回:
'module://IPython.kernel.zmq.pylab.backend_inline'
3 个回答
3
另一种方法。
xpoints = ypoints = plt.xlim()
plt.plot(xpoints, ypoints, linestyle='--', color='k', lw=3, scalex=False, scaley=False)
7
如果 0 <= X <= 1
和 0 <= Y <= 1
,那么这个方法对我有效:
import matplotlib.pyplot as plt
plt.scatter(X, Y)
plt.plot([0, 1], [0, 1], color = 'black', linewidth = 2)
plt.xlim(-0.05, 1.05)
plt.ylim(-0.05, 1.05)
当然,你可以根据需要调整这些限制。
33
在 matplotlib 版本小于等于 3.2 时
x = np.linspace(*ax.get_xlim())
ax.plot(x, x)
在 matplotlib 版本大于等于 3.3 时
matplotlib 3.3 新增了一个叫 ax.axline
的功能,这个功能可以更好地完成这个任务,并且在你改变坐标轴的范围时仍然可以正常工作:
ax.axline([0, 0], [1, 1])