web-dev-qa-db-fra.com

Comment montrer deux figures en utilisant matplotlib?

J'ai quelques problèmes lorsque je dessine deux figures en même temps, qui ne sont pas représentées dans un seul complot. Mais selon la documentation, j'ai écrit le code et seul le chiffre indiqué est celui-ci. Je pense que j'ai peut-être perdu quelque chose d'important. Quelqu'un pourrait-il m'aider à comprendre? Merci. (Le * tlist_first * utilisé dans le code est une liste de données.)

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()
63
AnneS

Vous pouvez également appeler plt.show() à la fin du script, mais vous pouvez également contrôler chaque figure séparément en effectuant les actions suivantes:

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

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

raw_input()

Dans ce cas, vous devez appeler raw_input Pour maintenir les chiffres en vie. De cette façon, vous pouvez sélectionner dynamiquement les figures à afficher.

Remarque: raw_input() a été renommé en input() in Python 3

76
joaquin

Vous ne devez appeler plt.show() qu'à la fin de la création de tous les tracés.

49
janneb

J'ai eu le même problème.


Fait:

f1 = plt.figure(1)

# code for figure 1

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


f2 = plt.figure(2)

# code for figure 2

plt.show()


Ecrivez 'plt.show ()' seulement une fois, après le dernier chiffre. Travaillé pour moi.

9
Nikhil Anand

Alternativement, je suggérerais d'activer interactif au début et de désactiver le dernier tracé. Tous apparaîtront, mais ils ne disparaîtront pas car votre programme restera jusqu'à ce que vous fermez les chiffres.

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()
2
Tom Mozdzen