2014-01-15 118 views
16

我正在繪製同一頁上的三個子圖。我想通過所有的小區繪製一條水平線。以下是我的代碼和生成的圖表:(你可以看到,我可以得到的曲線圖的一個水平線上,但不是全部)使用pyplot在python的多個子圖上繪製水平線

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() 

這將生成以下:再次 enter image description here

,我希望我在最後一個子圖上繪製的線條也出現在前兩個子圖上。我怎麼做?

+0

一般來說,越少不需要的細節(如你的軸標籤,你的實際數據),你的問題包含更好的。如果你的代碼是複製粘貼可運行的,那最好。 – tacaswell

回答

30

我找到了一種方法來處理任何絆倒在這裏的人。

我們需要從OP替換下面的行:

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) 

這將產生:

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

我們將其替換爲

enter image description here

+2

請記住接受你自己的答案,當它讓你。您可能還想閱讀https://stackoverflow.com/questions/16849483/which-is-the-recommended-way-to-plot-matplotlib-or-pylab/16849816#16849816瞭解pyplot vs OO接口的解釋。 – tacaswell

相關問題