Как показать две фигуры с помощью 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 04

Ко figure=gвторому тоже пришлось добавить plt.hist().
Майкл Литвин

мне нужны другие пакеты? 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

Это показывает его в одном окне, а не в двух отдельных окнах. Однако отвечает на вопрос OP. Проголосуйте поэтому.
Майк де Клерк

Но что делать, если вам нужен отдельный сюжет? это было построено по тому же сюжету
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.