2017-09-25 15 views
2

Jupyterを使用してPythoに2 x 2プロットのセットを作成するには、次のコードがあります。問題は、4番目のプロットの左のyラベル(右下)が3番目のプロットの右のyラベルと衝突することです。私は第4プロットのleft-y-labelのスケールを千に変更しようとしました。-1000,0,1000などを表示するのではなく、ちょうど1、0,1を付けてタイトルを得るのに十分なスペースを与えます。どうやってやるの?あなたの助けを事前にmatplotlibでY軸を千に設定する方法

#Testing 2 x 2 plots for FO reporting 

plt.figure(figsize=(15,9)) 

#First Plot 

ax1=plt.subplot(2,2,1) 
plt.title("Downhole Pressure") 
ax1.plot(Time, Downhole_pressure, 'b', markersize=2, label="Downhole pressure") 
plt.xlabel("Injection time", fontsize=10) 
plt.xlim(0,80) 
plt.ylabel("Pressure, (psi)", fontsize=10) 
plt.ylim(6500,7500) 
plt.legend(bbox_to_anchor=(.999,.89), prop={'size': 10}) 

ax2=ax1.twinx() 
ax2.plot(Time, Slurry_rate,'m', markersize=2, label="Slurry") 
ax2.plot(Time, Proppant_rate, 'g', markersize=2, label="Proppant") 
plt.ylabel("Injection rate, (BPM))", fontsize=10) 
plt.ylim(0,100) 

plt.legend(bbox_to_anchor=(.879,.825), prop={'size': 10}) 

#Second Plot 

ax1=plt.subplot(2,2,2) 
plt.title("Fracture Width") 
ax1.plot(Time, Max_Frac_Witdth, 'b', markersize=2, label="Max") 
ax1.plot(Time, Mean_Frac_Width, 'r', markersize=2, label="Mean") 
plt.xlabel("Injection time", fontsize=10) 
plt.xlim(0,80) 
plt.ylabel("Fracture width, (mm)", fontsize=10) 
plt.ylim(0,10) 
plt.legend(bbox_to_anchor=(.84,.89), prop={'size': 10}) 

ax2=ax1.twinx() 
ax2.plot(Time, Slurry_rate,'m', markersize=2, label="Slurry") 
ax2.plot(Time, Proppant_rate, 'g', markersize=2, label="Proppant") 
plt.ylabel("Injection rate, (BPM))", fontsize=10) 
plt.ylim(0,100) 
plt.legend(bbox_to_anchor=(.879,.775), prop={'size': 10}) 

#Third Plot 

ax1=plt.subplot(2,2,3) 
plt.title("Fracture Height") 
ax1.plot(Time, Max_Frac_Ver_Pos, 'b', markersize=2, label="Max") 
ax1.plot(Time, Min_Frac_Ver_Pos, 'r', markersize=2, label="Min") 
ax1.plot(Time, Frac_Ver_Height, 'darkblue', markersize=2, label="Fracture Vertical Height") 
plt.xlabel("Injection time", fontsize=10) 
plt.xlim(0,80) 
plt.ylabel("Fracture Vertical Position (ft)", fontsize=10) 
plt.ylim(-200,400) 
plt.legend(bbox_to_anchor=(.99,.6), prop={'size': 10}) 

ax2=ax1.twinx() 
ax2.plot(Time, Slurry_rate,'m', markersize=2, label="Slurry") 
ax2.plot(Time, Proppant_rate, 'g', markersize=2, label="Proppant") 
plt.ylabel("Injection rate, (BPM))", fontsize=10) 
plt.ylim(0,100) 
plt.legend(bbox_to_anchor=(.82,.775), prop={'size': 10}) 

#Fourth Plot 

ax1=plt.subplot(2,2,4) 
plt.title("Fracture Length") 
ax1.plot(Time, Max_Frac_Trans_Pos, 'b', markersize=2, label="Max") 
ax1.plot(Time, Min_Frac_Trans_Pos, 'r', markersize=2, label="Min") 
ax1.plot(Time, Frac_Trans_Length, 'darkblue', markersize=2, label="Fracture Transversal Length") 
plt.xlabel("Injection time", fontsize=10) 
plt.xlim(0,80) 
plt.ylabel("Fracture Transversal Position (ft)", fontsize=10) 

plt.ticklabel_format(style='sci', axis='x', scilimits=(-2e3,3e3)) #tried, didn't work 
#plt.ylim(-2e3,3e3) #tried, didn't work 

plt.legend(bbox_to_anchor=(.99,.6), prop={'size': 10}) 

ax2=ax1.twinx() 
ax2.plot(Time, Slurry_rate,'m', markersize=2, label="Slurry") 
ax2.plot(Time, Proppant_rate, 'g', markersize=2, label="Proppant") 
plt.ylabel("Injection rate, (BPM))", fontsize=10) 
plt.ylim(0,100) 
plt.legend(bbox_to_anchor=(.82,.775), prop={'size': 10}) 

plt.savefig('side-by-side_09.png', dpi=300) 
#plt.show() 
plt.gcf().clear() 
plt.close('all') 

ありがとう:私のコードに続いて

!タイトルのための十分な場所をできるように

答えて

1

、あなたは数字を保存する前にライン

plt.tight_layout() 

を追加することができます。軸の位置が最適化されます。

yticksは1、-1を示しているように、それは予想以上に良い作品

plt.ticklabel_format(useOffset=1000) 
+0

を使用し、軸のオフセットを変更するには!どうもありがとう! – Pegaso

関連する問題