使用pyplot在python中的多个子图上绘制水平线
Posted
技术标签:
【中文标题】使用pyplot在python中的多个子图上绘制水平线【英文标题】:Plotting a horizontal line on multiple subplots in python using pyplot 【发布时间】:2014-02-03 10:12:24 【问题描述】:我在同一页面上绘制三个子图。我想在所有子图中画一条水平线。以下是我的代码和结果图:(您可以注意到我可以在其中一个图上获得水平线,但不是全部)
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()
这会生成以下内容:
再次,我希望我在最后一个子图中绘制的线也出现在前两个子图中。我该怎么做?
【问题讨论】:
一般来说,您的问题包含的不需要的细节(如坐标轴标签、实际数据)越少越好。最好是您的代码是可复制粘贴运行的。 【参考方案1】:我找到了一种方法来为任何偶然发现此问题的人做这件事。
我们需要替换 OP 中的以下行:
plt.axhline(y=0.002, xmin=0, xmax=1, hold=None)
我们将其替换为:
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)
这会产生:
【讨论】:
请记住在允许时接受您自己的答案。您可能还想阅读 ***.com/questions/16849483/… 以了解 pyplot 与 OO 接口的说明。 根据documentation,xmin
和xmax
都应该在[0,1]范围内。在这里使用 xmax=3
会产生误导。【参考方案2】:
既然你已经定义了ax1
、ax2
和ax3
,那么在它们上面画水平线就很容易了。你需要为他们单独做这件事。但是您的代码可以简化:
for ax in [ax1, ax2, ax3]:
ax.axhline(y=0.002, c="blue",linewidth=0.5,zorder=0)
根据axhline documentation,xmin
和xmax
应该在 (0,1) 范围内。没有机会xmax=3.0
。由于您的意图是在轴上绘制水平线(这是 axhline
方法的默认行为),您可以省略 xmin
和 xmax
参数。
【讨论】:
以上是关于使用pyplot在python中的多个子图上绘制水平线的主要内容,如果未能解决你的问题,请参考以下文章