matplotlib를 사용하여 두 그림을 표시하는 방법은 무엇입니까?


81

하나의 플롯에 표시되지 않고 동시에 두 개의 그림을 그리는 동안 몇 가지 문제가 있습니다. 그러나 문서에 따르면 코드를 작성했으며 그림 1 만 표시됩니다. 중요한 걸 잃어버린 것 같아요. 누구든지 알아낼 수 있습니까? 감사. (코드에 사용 된 * tlist_first *는 데이터 목록입니다.)

plt.figure(1)
plt.hist(tlist_first, bins=2000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')
plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')

plt.axvline(x = 30, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 60, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend()
plt.xlim(0,120)
plt.ylim(0,1) 
plt.show()
plt.close() ### not working either with this line or without it

plt.figure(2)
plt.hist(tlist_first, bins=2000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')

plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')

plt.axvline(x = 240, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 1440, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend(loc= 4)
plt.xlim(0,2640)
plt.ylim(0,1)
plt.show()

답변:


91

plt.show()스크립트 끝에서 호출하는 대신 다음을 수행하여 각 Figure를 개별적으로 제어 할 수도 있습니다.

f = plt.figure(1)
plt.hist........
............
f.show()

g = plt.figure(2)
plt.hist(........
................
g.show()

raw_input()

이 경우 raw_input숫자를 살리기 위해 전화해야합니다 . 이렇게하면 표시 할 그림을 동적으로 선택할 수 있습니다.

참고 : Python 3에서 raw_input()로 이름이 변경되었습니다 input().


1
불행히도 python3.6 및 최신 matplotlib에서는 여러 개의 fig.show ()를 호출하면 아무것도 표시되지 않는 것 같습니다. 나는 여전히 끝에 plt.show ()를 호출해야한다.
kakyo

1
@kakyo- 3.6.6Matplotlib와 함께 Python 사용 2.2.2(작성 당시 최신 릴리스 임); 위의 솔루션이 저에게 효과적입니다. 문제는 사용 된 백엔드 와 같은 다른 것에서 비롯된 것이어야합니다 . 달리기 matplotlib.get_backend(), 나는 얻는다'Qt5Agg'
n1k31t4

나는 또한 figure=g두 번째 에 추가 해야했다 plt.hist().
Michael Litvin

다른 패키지가 필요합니까? NameError: name 'raw_input' is not defined
zheyuanWang 2010 년

1
@zheyuanWang python 3을 사용하는 경우 input(). 게시물의 마지막 메모를 참조하십시오
joaquin

61

plt.show()모든 플롯을 만든 후 마지막에 호출해야 합니다.


8
내가 전화하면 이후,이 매우 성가신 발견 show()한 번, 내가 다시 플롯을 보여주고 싶은 경우에, 나는 다시 replot해야, 다시 호출 할 수 없습니다?
Alcott

23

나는 이와 같은 문제가 있었다.


한 :

f1 = plt.figure(1)

# code for figure 1

# don't write 'plt.show()' here


f2 = plt.figure(2)

# code for figure 2

plt.show()


마지막 그림 뒤에 'plt.show ()'를 한 번만 씁니다. 나를 위해 일했습니다.



이것은 2 개의 별도 창이 아닌 동일한 창에 표시됩니다. 그래도 OP의 질문에 대답합니다. 그러므로 찬성.
Mike de Klerk

하지만 별도의 플롯을 원하면 어떨까요? 동일한 플롯에 플롯되었습니다
Nhoj_Gonk

8

또는 처음에 대화식을 켜고 마지막 플롯에서 끄는 것이 좋습니다. 모두 표시되지만 그림을 닫을 때까지 프로그램이 유지되므로 사라지지 않습니다.

import matplotlib.pyplot as plt
from matplotlib import interactive

plt.figure(1)
... code to make figure (1)

interactive(True)
plt.show()

plt.figure(2)
... code to make figure (2)

plt.show()

plt.figure(3)
... code to make figure (3)

interactive(False)
plt.show()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.