matplotlib에서 많은 서브 플롯으로 서브 플롯 크기 / 간격 개선 숫자를 허용하더라도 하위

이 질문 과 매우 유사 하지만 내 그림이 필요한만큼 커질 수 있다는 차이점이 있습니다.

matplotlib에 수직으로 쌓인 플롯을 모두 생성해야합니다. 결과는 figsave를 사용하여 저장되고 웹 페이지에서 볼 수 있으므로 하위 그림이 간격을두고 겹치지 않는 한 최종 이미지의 높이는 중요하지 않습니다.

내가 얼마나 큰 숫자를 허용하더라도 하위 그림은 항상 겹치는 것처럼 보입니다.

내 코드는 현재

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)



답변

사용해보십시오 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()

단단한 레이아웃없이

여기에 이미지 설명을 입력하십시오


단단한 레이아웃
여기에 이미지 설명을 입력하십시오


답변

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 파일에 의해 제어됩니다


답변

subplots_adjust (hspace = 0.001)이 저에게 효과적이라는 것을 알았습니다. space = None을 사용하면 각 플롯 사이에 여전히 공백이 있습니다. 그러나 0에 매우 가까운 것으로 설정하면 줄을서야합니다. 내가 여기에 업로드 한 것은 가장 우아한 코드는 아니지만 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()

여기에 이미지 설명을 입력하십시오


답변

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로 혼란을 시도했지만 그것을 늘리면 오버랩 문제를 해결하지 않고 모든 그래프를 작게 만드는 것 같습니다.”

따라서 더 많은 공백을 만들고 하위 플롯 크기를 유지하려면 총 이미지가 더 커야합니다.


답변

subplot_tool () 시도해 볼 수 있습니다

plt.subplot_tool()


답변

tight_layout현재 matplotlib 와 유사합니다 (버전 2.2 기준) constrained_layout. 대조적으로 tight_layout하나의 최적화 된 배치에 대한 코드의 임의의 시간이라고 할 수있다, constrained_layout활성화 될 수 있고 모든 드로잉 공정 전에 레이아웃을 optimze하는 속성이다.

따라서 서브 플롯 생성 전 또는 동안 (예 : 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

참고 항목 의 새로운 항목제한된 레이아웃 가이드


답변