使用pyplot在python中绘制多个子图上的水平线

Abh*_*mar 20 python matplotlib scatter-plot subplot line-plot

我正在同一页面上绘制三个子图.我想在所有子图中绘制一条horiZontal线.以下是我的代码和结果图:(您可以注意到我可以在其中一个图上获得水平线,但不是全部)

gs1 = gridspec.GridSpec(8, 2)
gs1.update(left=0.12, right=.94, wspace=0.12)
ax1 = plt.subplot(gs1[0:2, :])
ax2 = plt.subplot(gs1[3:5, :], sharey=ax1)
ax3 = plt.subplot(gs1[6:8, :], sharey=ax1)

ax1.scatter(theta_cord, density, c = 'r', marker= '1')
ax2.scatter(phi_cord, density, c = 'r', marker= '1')
ax3.scatter(r_cord, density, c = 'r', marker= '1')
ax1.set_xlabel('Theta (radians)')
ax1.set_ylabel('Galaxy count')
ax2.set_xlabel('Phi (radians)')
ax2.set_ylabel('Galaxy count')
ax3.set_xlabel('Distance (Mpc)')
ax3.set_ylabel('Galaxy count')
plt.ylim((0,0.004))
loc = plticker.MultipleLocator(base=0.001)
ax1.yaxis.set_major_locator(loc)

plt.axhline(y=0.002, xmin=0, xmax=1, hold=None)

plt.show()
Run Code Online (Sandbox Code Playgroud)

这会生成以下内容: 在此输入图像描述

同样,我希望我在最后一个子图上绘制的线也出现在前两个子图上.我怎么做?

Abh*_*mar 34

无论如何,我找到了一种方法可以帮助那些偶然发现它的人.

我们需要从OP中替换以下行:

plt.axhline(y=0.002, xmin=0, xmax=1, hold=None)
Run Code Online (Sandbox Code Playgroud)

我们将其替换为:

ax1.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)
ax2.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)
ax3.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)
Run Code Online (Sandbox Code Playgroud)

这会产生:

在此输入图像描述

  • 它会让你记住接受你自己的答案.您可能还需要阅读/sf/ask/1179463841/#16849816以获取有关pyplot与OO接口的说明. (2认同)

jdh*_*hao 5

由于您已定义ax1,ax2ax3,因此很容易在它们上绘制水平线。你需要为他们单独做。但是您的代码可以简化:

for ax in [ax1, ax2, ax3]:
    ax.axhline(y=0.002, c="blue",linewidth=0.5,zorder=0)
Run Code Online (Sandbox Code Playgroud)

axhline文档xminxmax应该是在范围(0,1)。没有机会xmax=3.0。由于您的意图是在轴上绘制水平线(这是axhlinemethod的默认行为),您可以省略xminandxmax参数。