441

この質問と非常に似ていますが、私の図は必要なだけ大きくできるという違いがあります。

matplotlib で垂直に積み上げられたプロットを大量に生成する必要があります。結果は figsave を使用して保存され、Web ページで表示されるため、サブプロットが重ならないように間隔が空けられている限り、最終的な画像の高さは気にしません。

図をどれだけ大きくしても、サブプロットは常に重なっているように見えます。

私のコードは現在次のようになっています

import matplotlib.pyplot as plt
import my_other_module

titles, x_lists, y_lists = my_other_module.get_data()

fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
    plt.subplot(len(titles), 1, i)
    plt.xlabel("Some X label")
    plt.ylabel("Some Y label")
    plt.title(titles[i])
    plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
4

7 に答える 7

597

使ってみてplt.tight_layout

簡単な例として:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=4, ncols=4)
fig.tight_layout() # Or equivalently,  "plt.tight_layout()"

plt.show()

タイトなレイアウトなし

ここに画像の説明を入力


タイトなレイアウトで ここに画像の説明を入力

于 2012-03-22T17:55:12.877 に答える
417

plt.subplots_adjustサブプロット間の間隔を変更するために使用できます(ソース)

呼び出し署名:

subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

パラメータの意味 (および推奨されるデフォルト) は次のとおりです。

left  = 0.125  # the left side of the subplots of the figure
right = 0.9    # the right side of the subplots of the figure
bottom = 0.1   # the bottom of the subplots of the figure
top = 0.9      # the top of the subplots of the figure
wspace = 0.2   # the amount of width reserved for blank space between subplots
hspace = 0.2   # the amount of height reserved for white space between subplots

実際のデフォルトは rc ファイルによって制御されます

于 2011-06-30T21:45:11.007 に答える
77

subplots_adjust(hspace = 0.001) が最終的に機能することがわかりました。space = None を使用すると、各プロット間にまだ空白があります。ただし、ゼロに非常に近い値に設定すると、それらが整列するように強制されるようです。ここにアップロードしたものは、最も洗練されたコードではありませんが、hspace がどのように機能するかを見ることができます。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tic

fig = plt.figure()

x = np.arange(100)
y = 3.*np.sin(x*2.*np.pi/100.)

for i in range(5):
    temp = 510 + i
    ax = plt.subplot(temp)
    plt.plot(x,y)
    plt.subplots_adjust(hspace = .001)
    temp = tic.MaxNLocator(3)
    ax.yaxis.set_major_locator(temp)
    ax.set_xticklabels(())
    ax.title.set_visible(False)

plt.show()

ここに画像の説明を入力

于 2012-03-22T17:43:54.780 に答える
68

tight_layout現在 (バージョン 2.2 の時点で) matplotlibと同様に、constrained_layout. tight_layout単一の最適化されたレイアウトのコードでいつでも呼び出すことができる とは対照的に、constrained_layoutプロパティはアクティブであり、すべての描画ステップの前にレイアウトを最適化します。

figure(constrained_layout=True)したがって、またはなどのサブプロットの作成前または作成中にアクティブ化する必要がありますsubplots(constrained_layout=True)

例:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(4,4, constrained_layout=True)

plt.show()

ここに画像の説明を入力

Constrained_layout は次の方法で設定することもできますrcParams

plt.rcParams['figure.constrained_layout.use'] = True

What's new エントリConstrained Layout Guideを参照してください。

于 2018-08-02T15:25:08.213 に答える
36
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10,60))
plt.subplots_adjust( ... )

plt.subplots_adjustメソッド

def subplots_adjust(*args, **kwargs):
    """
    call signature::

      subplots_adjust(left=None, bottom=None, right=None, top=None,
                      wspace=None, hspace=None)

    Tune the subplot layout via the
    :class:`matplotlib.figure.SubplotParams` mechanism.  The parameter
    meanings (and suggested defaults) are::

      left  = 0.125  # the left side of the subplots of the figure
      right = 0.9    # the right side of the subplots of the figure
      bottom = 0.1   # the bottom of the subplots of the figure
      top = 0.9      # the top of the subplots of the figure
      wspace = 0.2   # the amount of width reserved for blank space between subplots
      hspace = 0.2   # the amount of height reserved for white space between subplots

    The actual defaults are controlled by the rc file
    """
    fig = gcf()
    fig.subplots_adjust(*args, **kwargs)
    draw_if_interactive()

また

fig = plt.figure(figsize=(10,60))
fig.subplots_adjust( ... )

写真のサイズが重要です。

「hspaceをいじってみましたが、hspaceを増やすと、オーバーラップの問題を解決せずに、すべてのグラフが小さくなるようです。」

したがって、より多くの空白を作成し、サブプロットのサイズを維持するには、画像全体を大きくする必要があります。

于 2013-02-26T10:25:19.123 に答える
29

subplot_tool() を試すことができます

plt.subplot_tool()
于 2015-07-18T11:55:03.193 に答える