Як показати дві фігури за допомогою matplotlib?


81

У мене виникають проблеми, коли я малюю одночасно дві фігури, не показані в одному сюжеті. Але згідно з документацією, я написав код, і видно лише малюнок. Думаю, можливо, я втратив щось важливе. Хтось може допомогти мені розібратися? Дякую. (* 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()в кінці сценарію, ви також можете контролювати кожну фігуру окремо, роблячи:

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

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

raw_input()

У цьому випадку ви повинні зателефонувати, raw_inputщоб зберегти цифри живими. Таким чином ви можете динамічно вибирати, які фігури ви хочете показувати

Примітка: raw_input()було перейменовано на input()Python 3


1
На жаль, для python3.6 та останнього matplotlib виклик декількох fig.show (), здається, нічого не показує. Мені все-таки доведеться зателефонувати plt.show () наприкінці.
kakyo

1
@kakyo - Використання Python 3.6.6з Matplotlib 2.2.2(що було останнім випуском на момент написання твору); рішення вище працює для мене. Ваша проблема має бути пов’язана з чимось іншим, наприклад, із використовуваної внутрішньої мережі . Біжу matplotlib.get_backend(), отримую'Qt5Agg'
n1k31t4

Мені також довелося додати figure=gдо другого plt.hist().
Michael Litvin

мені потрібні інші пакети? NameError: name 'raw_input' is not defined
zheyuanWang

1
@zheyuanWang Якщо ви використовуєте python 3, ви повинні використовувати input(). Дивіться останню замітку в дописі
Хоакін

61

Вам слід телефонувати plt.show()лише в кінці після створення всіх графіків.


8
Мені це show()здавалося досить прикро, оскільки, якщо я зателефонував один раз, я не можу зателефонувати йому знову, якщо я хочу показати сюжет ще раз, мені доведеться перекласти його ще раз?
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 ()' лише один раз, після останньої цифри. Працював у мене.


6
Це те саме, що відповідь від Janneb ще в 2011 році
n1k31t4

Це показує це в одному вікні, а не в 2 окремих вікнах. Відповідає на запитання ОП. Отже, проголосуйте.
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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.