2017-03-31 10 views
1

this questionのようなプロットを作成しようとしています。グリッドスペックで図を追加

は、なぜ私は2つだけpannelsを取得しています、つまりはただGS2:私のような姿をしたいのですが結局

enter image description here

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

def main(): 
    fig = plt.figure() 
    gs1 = gridspec.GridSpec(1,4) 
    gs2 = gridspec.GridSpec(2,4) 

    for n in range(4): 
     ax00 = plt.subplot(gs1[0,n]) 
     ax10 = plt.subplot(gs2[0,n]) 
     ax11 = plt.subplot(gs2[1,n]) 

     ax00.plot([0,0],[0,1*n],color='r') 
     ax10.plot([0,1],[0,2*n],color='b') 
     ax11.plot([0,1],[0,3*n],color='g') 
    plt.show() 

main() 

私にこの与えます:

enter image description here

質問の最後にコードを使用して取得します。しかし、私はgs2.update(hspace=0)(グリッドスペックを使って試した理由)を与えるプロットの可動性を持っていたいと思います。私。私は最後と2番目の行の間のスペースを削除したいと思います。

def whatIwant(): 
    f, axarr = plt.subplots(3,4) 

    for i in range(4): 
     axarr[0][i].plot([0,0],[0,1*i],color='r') 
     axarr[1][i].plot([0,1],[0,2*i],color='b') #remove the space between those and be able to move the plots where I want 
     axarr[2][i].plot([0,1],[0,3*i],color='g') 
    plt.show() 
+0

こんにちはImportanceOfBeingErnestを、私は質問を更新しました。申し訳ありませんが、私はいつものように少しは最小限でした。それは今はっきりしていますか? – Sebastiano1991

答えて

1

これは確かにそれはGridSpecFromSubplotSpecを使用することは理にかなって例1、だろう。つまり、1列2行(1対2の高さ比率)の全体的なGridSpecを作成します。最初の行には、1行4列のGridSpecFromSubplotSpecを入れます。 2行目に2行4列の行を追加し、さらに2行の行にスペースがないようにhspace=0.0を指定します。

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 


fig = plt.figure() 

gs = gridspec.GridSpec(2, 1, height_ratios=[1,2]) 
gs0 = gridspec.GridSpecFromSubplotSpec(1, 4, subplot_spec=gs[0], wspace=0.4) 
gs1 = gridspec.GridSpecFromSubplotSpec(2, 4, subplot_spec=gs[1], hspace=0.0, wspace=0.4) 

for n in range(4): 
    ax00 = plt.subplot(gs0[0,n]) 
    ax10 = plt.subplot(gs1[0,n]) 
    ax11 = plt.subplot(gs1[1,n], sharex=ax10) 
    plt.setp(ax10.get_xticklabels(), visible=False) 
    ax00.plot([0,0],[0,1*n],color='r') 
    ax10.plot([0,1],[0,2*n],color='b') 
    ax11.plot([0,1],[0,3*n],color='g') 
plt.show() 

enter image description here

このソリューションの利点関連質問の答えに1とは対照的に、あなたがGridSpecsが重複していないので、彼らはお互いにどのように関係するかを考える必要がないことです。


あなたはまだ疑問からコードが機能しなかった理由に興味を持っている場合:
あなたは、それぞれが(この場合は3)行の合計額を持つ2つの異なるGridSpecsを使用する必要があります。しかし、その後、最初のGridSpecの1行目と2 GridSpecの第二の二列取り込む:

import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 

def main(): 
    fig = plt.figure() 
    gs1 = gridspec.GridSpec(3,4) 
    gs2 = gridspec.GridSpec(3,4, hspace=0.0) 

    for n in range(4): 
     ax00 = plt.subplot(gs1[0,n]) 
     ax10 = plt.subplot(gs2[1,n]) 
     ax11 = plt.subplot(gs2[2,n]) 

     ax00.plot([0,0],[0,1*n],color='r') 
     ax10.plot([0,1],[0,2*n],color='b') 
     ax11.plot([0,1],[0,3*n],color='g') 
    plt.show() 

main() 
関連する問題