programing

매트플롯립에게 플롯이 끝났다는 것을 어떻게 알립니까?

padding 2023. 6. 7. 22:12
반응형

매트플롯립에게 플롯이 끝났다는 것을 어떻게 알립니까?

다음 코드는 두 의 PostScript(.ps) 파일로 플롯되지만 두 번째 코드는 두 줄을 모두 포함합니다.

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(111)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.subplot(111)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

매트플롯립에게 두 번째 플롯을 새로 시작하도록 지시하려면 어떻게 해야 합니까?

명확한 그림 명령이 있으며, 이를 통해 다음과 같은 작업을 수행할 수 있습니다.

plt.clf()

동일한 그림에 여러 개의 하위 그림이 있는 경우

plt.cla()

현재 축을 지웁니다.

사용할 수 있습니다.figure새 그림을 만드는 방법(예: 사용)close첫 번째 줄거리 이후에

@David Cournafeau에서 언급한 바와 같이,figure().

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.figure()
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("first.ps")


plt.figure()
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

또는subplot(121)/subplot(122)동일한 그림, 다른 위치에 대해 계산합니다.

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

plt.subplot(121)
x = [1,10]
y = [30, 1000]
plt.loglog(x, y, basex=10, basey=10, ls="-")

plt.subplot(122)
x = [10,100]
y = [10, 10000]
plt.loglog(x, y, basex=10, basey=10, ls="-")
plt.savefig("second.ps")

입력만 하면 됩니다.plt.hold(False)첫 번째 plt.plot 이전에, 그리고 당신은 당신의 원래 코드를 고수할 수 있습니다.

예를 들어 웹 애플리케이션에서 Matplotlib을 대화형으로 사용하는 경우 (예: ipython)을 찾을 수 있습니다.

plt.show()

대신에plt.close()또는plt.clf().

matplotlib의 소스 코드에서.파이플롯, 아래figure()설명서:

If you are creating many figures, make sure you explicitly call
    `.pyplot.close` on the figures you are not using, because this will
    enable pyplot to properly clean up the memory.

그래서 다른 사람들이 말했듯이,plt.close()당신이 그것을 다 끝내면, 당신은 갈 수 있을 것입니다!

참고: 다음을 통해 그림을 작성하는 경우f = plt.figure()를 통해 닫을 수 있습니다.plt.close( f )대신에f.close().

아무도 작동하지 않는 경우 이 항목을 확인합니다.각 축을 따라 x 및 y 배열의 데이터가 있는 경우를 말합니다.그런 다음 x와 y를 비우도록 초기화한 셀(점피터)을 확인합니다.데이터를 다시 초기화하지 않고 x 및 y에 추가할 수 있기 때문입니다.그림에도 오래된 데이터가 있습니다.그러니까 확인해 보세요..

해보셨습니까plt.close()제게 효과가 있었고 실수로 같은 줄거리를 여러 번 저장하지 않았다는 것을 확인했습니다.

코드:

def save_to(root: Path, plot_name: str = 'plot', close: bool = True):
    """
    Assuming there is a plot in display, saves it to local users desktop users desktop as a png, svg & pdf.

    note:
        - ref on closing figs after saving: https://stackoverflow.com/questions/741877/how-do-i-tell-matplotlib-that-i-am-done-with-a-plot
        - clf vs cla https://stackoverflow.com/questions/16661790/difference-between-plt-close-and-plt-clf
    """
    root: Path = root.expanduser()
    plt.savefig(root / f'{plot_name}.png')
    plt.savefig(root / f'{plot_name}.svg')
    plt.savefig(root / f'{plot_name}.pdf')
    if close:
        # plt.clf()
        # plt.cla()
        plt.close()

나의 궁극적인 utils lib: https://github.com/brando90/ultimate-utils .

언급URL : https://stackoverflow.com/questions/741877/how-do-i-tell-matplotlib-that-i-am-done-with-a-plot

반응형