4

次のように、2 つの行と 1 つの列に 2 つのサブプロットを含む図があります。

fig, (ax1, ax2) = subplots(
    nrows=2,
    ncols=1,
)

2 つのサブプロットは円グラフであるため、軸を正方形にしたいと考えています。API を参照した後、各サブプロットの軸を調整する正しい方法は次のとおりです。

ax1.axis([0, 8, 0, 8])
ax2.axis([0, 8, 0, 8])

次に、図全体のサイズを調整します。各サブプロットの幅は 8 インチなので、図の幅も 8 インチに設定し、図の高さを 2*8=16 インチに設定します。

fig.set_size_inches(8, 16)

これらの設定により、適切にフォーマットされた円グラフが作成されます。しかし、図を PDF ファイルに保存すると、パイの扇形の 1 つのラベルが図の右端で切り取られます。保存されたファイルでは、プレビュー ウィンドウよりも図が狭くなります。そのため、サブプロットの軸を保持しながら、x 軸に沿って図を広げたいのです。次のようにして図を広げようとすると:

fig.set_size_inches(12, 16)

これで図の幅が広がりましたが、残念ながら 2 つの円グラフも同様です。私の理解では、axis()呼び出しはサブプロットの次元を保持する必要がありますが、そうではありません。autoscale、xlim、ylim などについて多くのことを読んで試した後、私はさらに混乱し、何も機能しません。

サブプロットの寸法を保持して図を広げて、x 軸に沿って空白を増やし、ラベルを切り取らずに表示できるようにしたいだけです。それ、どうやったら出来るの?

4

1 に答える 1

8

を使用することをお勧めしfig.tight_layoutます。大まかに2つのパスがあります。pad

fig.tight_layout(pad=2)

図形の端からすべての端を移動しながら、または

fig.tight_layout(rect=[0,0,.8,1]) 

これにより、サブプロットが押し込まれるボックスのサイズが (図の分数の単位で) 調整されます。これは、新しい (1.2 以降) バージョンでのみ機能します。

サブプロットを手動で作成することもできます (これは非常に面倒ですが、完全に制御できます)、gridspecを使用することもできます。サブプロットのレイアウトは問題のようですmatplotlibには解決する方法がたくさんあります。

これを行う面倒な方法は

fig = plt.figure()


top_offset = .07
left_offset = .15
right_offset = .2
bottom_offset = .13
hgap = .1
ax_width = 1-left_offset - right_offset
ax_height = (1-top_offset - bottom_offset - hgap)/2

ax1 = fig.add_axes([left_offset, bottom_offset + ax_height + hgap, ax_width, ax_height])
ax2 = fig.add_axes([left_offset, bottom_offset, ax_width, ax_height])

5 つのパラメーターを微調整して、フィギュアの見栄えを良くします。

于 2013-01-13T19:28:58.960 に答える