Cuando se usa esto en un script (no en IPython), no sucede nada, es decir, la ventana del gráfico no aparece:
import numpy as np
import pandas as pd
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()
Incluso al agregar time.sleep(5)
, todavía no hay nada. ¿Por qué?
¿Hay alguna manera de hacerlo sin tener que llamar manualmente a matplotlib ?
python
pandas
matplotlib
Basj
fuente
fuente
ts.plot()
?import matplotlib.pyplot as plt
,plt.show()
ts.plot()
, el programa termina inmediatamente después de esto. Incluso si agregotime.sleep(10)
nada se muestra.plot()
en un objeto panda manejaría todo por mí (es decir, los pandas hacen el trabajo matplotlib, en lugar de mí): vea este ejemplo .Respuestas:
Una vez que haya hecho su diagrama, debe decírselo a matplotlib
show
. La forma habitual de hacer las cosas es importarmatplotlib.pyplot
y llamarshow
desde allí:import numpy as np import pandas as pd import matplotlib.pyplot as plt ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) ts.plot() plt.show()
Dado que solicitó no hacer eso (¿por qué?), Puede usar el siguiente [NOTA: Parece que esto ya no funciona con las versiones más recientes de
pandas
]:import numpy as np import pandas as pd ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) ts.plot() pd.tseries.plotting.pylab.show()
Pero todo lo que está haciendo allí es encontrar un lugar que
matplotlib
se ha importadopandas
y llamar a la mismashow
función desde allí.¿Está tratando de evitar llamar
matplotlib
en un esfuerzo por acelerar las cosas? Si es así, realmente no está acelerando nada, ya quepandas
ya importapyplot
:python -mtimeit -s 'import pandas as pd' 100000000 loops, best of 3: 0.0122 usec per loop python -mtimeit -s 'import pandas as pd; import matplotlib.pyplot as plt' 100000000 loops, best of 3: 0.0125 usec per loop
Finalmente, la razón por la que el ejemplo que vinculó en los comentarios no necesita la llamada
matplotlib
es porque se está ejecutando interactivamente en uniPython notebook
, no en un script.fuente
En caso de que esté usando
matplotlib,
y aún, las cosas no aparezcan en el cuaderno iPython (o también en Jupyter Lab) recuerde configurar la opciónmatplotlib
en línea para en el cuaderno.import matplotlib.pyplot as plt %matplotlib inline
Entonces, el siguiente código funcionará perfectamente:
fig, ax = plt.subplots(figsize=(16,9)); change_per_ins.plot(ax=ax, kind='hist')
Si no configura la opción en línea, no aparecerá y al agregar un
plt.show()
al final obtendrá salidas duplicadas.fuente
Yo hice solo
import matplotlib.pyplot as plt %matplotlib inline
y agrega una línea
junto a df.plot () y funcionó bien para
fuente
%matplotlib inline
(este no es Python estándar que se puede usar en un script).%matplotlib inline
se utiliza en el cuaderno ipython / jupyter ...Las otras respuestas implican importar
matplotlib.pyplot
y / o llamar a alguna segunda función manualmente.En su lugar, puede configurarlo
matplotlib
para estar en modo interactivo con sus archivos de configuración .Simplemente agregue la línea
interactive: True
a un archivo llamado
matplotlibrc
en uno de los siguientes lugares:matplotlib.get_configdir()
/home/username/.config/matplotlib/
C:\\Documents and Settings\\username\\.matplotlib\\
fuente