python - font - ¿Cómo puedo mostrar las cifras por separado en matplotlib?
plot title font size matplotlib (3)
Digamos que tengo dos figuras en matplotlib, con una gráfica por figura:
import matplotlib.pyplot as plt
f1 = plt.figure()
plt.plot(range(0,10))
f2 = plt.figure()
plt.plot(range(10,20))
Luego muestro ambos de una vez
plt.show()
¿Hay alguna manera de mostrarlos por separado, es decir, mostrar solo f1
?
O mejor: ¿cómo puedo administrar las cifras por separado, como en el siguiente código ''ilusorio'' (que no funciona):
f1 = plt.figure()
f1.plot(range(0,10))
f1.show()
Con Matplotlib anterior a la versión 1.0.1, show()
solo debería llamarse una vez por programa , incluso si parece funcionar dentro de ciertos entornos (algunos backends, en algunas plataformas, etc.).
La función de dibujo relevante es en realidad draw()
:
import matplotlib.pyplot as plt
plt.plot(range(10)) # Creates the plot. No need to save the current figure.
plt.draw() # Draws, but does not block
raw_input() # This shows the first figure "separately" (by waiting for "enter").
plt.figure() # New window, if needed. No need to save it, as pyplot uses the concept of current figure
plt.plot(range(10, 20))
plt.draw()
# raw_input() # If you need to wait here too...
# (...)
# Only at the end of your program:
plt.show() # blocks
Es importante reconocer que show()
es un ciclo infinito, diseñado para manejar eventos en las diversas figuras (cambio de tamaño, etc.). Tenga en cuenta que, en principio, las llamadas a draw()
son opcionales si llama a matplotlib.ion()
al comienzo de su script (he visto esto fallar en algunas plataformas y backends, sin embargo).
No creo que Matplotlib ofrezca un mecanismo para crear una figura y mostrarla opcionalmente; esto significa que se mostrarán todas las figuras creadas con figure()
. Si solo necesita mostrar secuencialmente las figuras (ya sea en la misma ventana o no), puede hacer lo mismo en el código anterior.
Ahora, la solución anterior podría ser suficiente en casos simples, y para algunos back-ends de Matplotlib. Algunos backends son lo suficientemente agradables para permitirle interactuar con la primera figura aunque no haya llamado a show()
. Pero, por lo que yo entiendo, no tienen que ser agradables. El enfoque más sólido sería lanzar cada dibujo de figura en un hilo separado, con un show()
final show()
en cada hilo. Creo que esto es esencialmente lo que hace IPython .
El código anterior debería ser suficiente la mayor parte del tiempo.
PD : ahora, con Matplotlib versión 1.0.1+, show()
puede ser llamado varias veces (con la mayoría de los backends).
Por supuesto. Agregue un Axes
usando add_subplot
. ( import
editada) ( show
editada)
import matplotlib.pyplot as plt
f1 = plt.figure()
f2 = plt.figure()
ax1 = f1.add_subplot(111)
ax1.plot(range(0,10))
ax2 = f2.add_subplot(111)
ax2.plot(range(10,20))
plt.show()
Alternativamente, use add_axes
.
ax1 = f1.add_axes([0.1,0.1,0.8,0.8])
ax1.plot(range(0,10))
ax2 = f2.add_axes([0.1,0.1,0.8,0.8])
ax2.plot(range(10,20))
Quizás necesite leer sobre el uso interactivo de Matplotlib . Sin embargo, si va a construir una aplicación, debe usar la API e incrustar las figuras en las ventanas de su kit de herramientas GUI elegido (vea examples/embedding_in_tk.py
, etc.).