2014-10-30 74 views
0

我用這種方法繪製4副區(即2行2列):Matplotlib次要情節:傳說和軸大規模

fig1= plt.figure(figsize=(8,6)) 
ax1 = fig1.add_subplot(221) 
ax1.errorbar((r1),(xi1),fmt='',yerr=(low_err_1,upp_err_1),ls='none',color='black') 
ax1.scatter((r1),(xi1),c='red',marker="o",s=30,label= r'$\xi(r)$ $0.0<z<0.5$') 
ax1.plot((r1),(curve_y_1),'--',label='fit $0.0<z<0.5$') 
ax1.set_xscale('log') 
ax1.set_yscale('log') 

ax2 = fig1.add_subplot(222) 
ax2.errorbar((r2),(xi2),fmt='',yerr=(low_err_2,upp_err_2),ls='none',color='black') 
ax2.scatter((r2),(xi2),c='blue',marker="o",s=30,label=r'$\xi(r)$ $0.5<z<1.0$') 
ax2.plot((r2),(curve_y_2),'--',label='fit $0.5<z<1.0$') 
ax2.set_xscale('log') 
ax2.set_yscale('log') 

ax3 = fig1.add_subplot(223) 
ax3.errorbar((r3),(xi3),fmt='',yerr=(low_err_3,upp_err_3),ls='none',color='black') 
ax3.scatter((r3),(xi3),c='yellow',marker="o",s=30,label=r'$\xi(r)$ $1.0<z<1.5$') 
ax3.plot((r3),(curve_y_3),'--',label='fit $1.0<z<1.5$') 
ax3.set_xscale('log') 
ax3.set_yscale('log') 

ax4 = fig1.add_subplot(224) 
ax4.errorbar((r4),(xi4),fmt='',yerr=(low_err_4,upp_err_4),ls='none',color='black') 
ax4.scatter((r4),(xi4),c='black',marker="o",s=30,label=r'$\xi(r)$ $1.5<z<2.0$') 
ax4.plot((r4),(curve_y_4),'--',label='fit $1.5<z<2.0$') 
ax4.set_xscale('log') 
ax4.set_yscale('log') 

我的問題是:

  1. 有沒有辦法來使用單個(公共)命令將圖例添加到所有這些子圖中,而不是分別爲每個子圖輸入ax1.legend(loc = 'best')ax2.legend(loc = 'best')等等?
  2. 我想使用單個(公共)命令設置每個子圖的對數縮放。如您所見,現在我正在分別設置軸標尺以記錄每個子圖。

回答

2

只要定義一個軸格式化功能:

def style_ax(ax): 
    ax.legend(loc='best') 
    ax.set_yscale('log') 
    ax.set_xscale('log') 

而不是把它完成時:

for ax in [ax1, ax2, ax3, ax4]: 
    style_ax(ax) 
相關問題