2016-05-06 17 views
1

3つの異なるプロットを3つのサブプロットで1つの図にプロットしようとしています。また、最初の図形を他の2つの図形の2倍の幅にしたい。したがって私は使用しましたPythonのサブプロットが正しく機能しない

gs = gridspec.GridSpec(2, 2, width_ratios=[2,1], height_ratios=[1,1]) 

しかし、出力はax3にプロットされたすべての数字を持っています。

enter image description here

私のコードは

import matplotlib 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.mlab as mlab 
import matplotlib.gridspec as gridspec 

gs = gridspec.GridSpec(2, 2, width_ratios=[2,1], height_ratios=[1,1]) 
ax1=plt.subplot(gs[:,:-1]) 
ax2=plt.subplot(gs[:-1,-1]) 
ax3=plt.subplot(gs[-1,-1]) 


# ax 1 
X=np.linspace(0,10,100) 
Y=np.sin(X) 
ax1 = plt.gca() 
ax1.scatter(X, Y) 
ax1.axis("tight") 
ax1.set_title('ax1') 
ax1.set_xlim([0,10]) 
ax1.set_ylim([-1,1]) 
plt.xticks([]) 
plt.yticks([]) 


# ax 2 
ax2 = plt.gca() 
vel=np.random.rand(1000) 
n, bins, patches = plt.hist(vel, 10, normed=True, histtype='stepfilled', facecolor='green', alpha=1.0) 
ax2.set_title('Velocity Distribution') 
ax2.axis("tight") 
plt.xticks([0,0.05,0.10]) 
plt.yticks([0,10,20]) 


# ax 3 
Z=np.exp(X) 
ax3.plot(X,Z,'red',lw=5) 

plt.show() 

誰かが、私はこれを修正する方法を教えてもらえますここに与えられています。前もって感謝します。

答えて

1

いくつかの行が修正されました。あなたのコードと比較してください。

import matplotlib 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.mlab as mlab 
import matplotlib.gridspec as gridspec 


gs = gridspec.GridSpec(2, 2, width_ratios=[2,1], height_ratios=[1,1]) 
ax1=plt.subplot(gs[:,:-1]) 
ax2=plt.subplot(gs[:-1,-1]) 
ax3=plt.subplot(gs[-1,-1]) 


# ax 1 
X=np.linspace(0,10,100) 
Y=np.sin(X) 
#ax1 = plt.gca() 
ax1.scatter(X, Y) 
ax1.axis("tight") 
ax1.set_title('ax1') 
ax1.set_xlim([0,10]) 
ax1.set_ylim([-1,1]) 
# You can use ax1.set_xticks() and ax1.set_xticklabels() instead. 
ax1.set_xticks([]) 
ax1.set_yticks([]) 
#plt.xticks([]) 
#plt.yticks([]) 


# ax 2 
#ax2 = plt.gca() 
vel=np.random.rand(1000) 
n, bins, patches = ax2.hist(vel, 10, normed=True, histtype='stepfilled', facecolor='green', alpha=1.0) 
ax2.set_title('Velocity Distribution') 
ax2.axis("tight") 
# You can use ax2.set_xticks() and ax2.set_xticklabels() instead. 
ax2.set_xticks([0,0.5,1]) 
ax2.set_yticks([0,1,2]) 
#plt.xticks([0,0.05,0.10]) 
#plt.yticks([0,10,20]) 


# ax 3 
Z=np.exp(X) 
ax3.plot(X, Z,'red', lw=5) 
# You can use ax3.set_xticks() and ax3.set_xticklabels() instead. 
ax3.set_xticks([0, 5, 10]) 
ax3.set_yticks([0, 10000, 20000]) 
ax3.set_yticklabels(['0', '10K', '20K']) 

plt.show() 

enter image description here

+0

感謝。できます。最初のチェックで、 'ax2 = plt.gca()'という行を削除したことに気付きました。彼らがなぜ必要でないのか聞いてもよろしいですか?または、彼らは彼らが使用されている他の場所で何をしていますか? – kanayamalakar

+1

@kanayamalakarこれらの3つの軸の最後のaxに対して 'ax3 = plt.subplot(gs [-1、-1]) 'を割り当てました。しかしその直後に 'ax1 = plt.gca()'がありました。 'gca()'はget_current_axesを意味します。したがって、 'ax3 = ax1'のように動作します。それがax3にプロットされたすべての軸の理由です。 – su79eu7k

+1

@kanayamalakar ax3のダニの答えが少し改善されました。 1つのサブプロットにアクセスするには 'sca()'を使います。 – su79eu7k

関連する問題