La trama de Pandas no se muestra

81

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 ?

Basj
fuente
¿Obtienes algún resultado de ts.plot()?
itzy
1
¿Qué quieres decir con "llamar manualmente a matplotlib"? la forma habitual es import matplotlib.pyplot as plt,plt.show()
maxymoo
1
@itzy: no pasa nada cuando ts.plot(), el programa termina inmediatamente después de esto. Incluso si agrego time.sleep(10)nada se muestra
Basj
1
@maxymoo: pensé que hacerlo .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 .
Basj

Respuestas:

159

Una vez que haya hecho su diagrama, debe decírselo a matplotlib show. La forma habitual de hacer las cosas es importar matplotlib.pyploty llamar showdesde 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 matplotlibse ha importado pandasy llamar a la misma showfunción desde allí.

¿Está tratando de evitar llamar matplotliben un esfuerzo por acelerar las cosas? Si es así, realmente no está acelerando nada, ya que pandasya importa pyplot:

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 matplotlibes porque se está ejecutando interactivamente en un iPython notebook, no en un script.

tmdavison
fuente
Cuando ejecuto 'pd.tseries.plotting.pylab.show ()' obtengo "padnas.tseries 'no tiene trazado de atributos, ¿está desactualizado? Lo escribiste en 2015 ..
Sebastian Nielsen
Sí, parece que la puerta trasera de matplotlib ya no está ahí. Todavía recomiendo la primera opción de todos modos
tmdavison
2
Gracias. Creo que el diseño de la API podría ser mejor. Es extraño que necesitemos saber sobre matplotlib para usar panda.plot
Phil
5

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ón matplotliben 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.

MP de Hamed
fuente
0

Yo hice solo

import matplotlib.pyplot as plt

%matplotlib inline

y agrega una línea

plt.show()

junto a df.plot () y funcionó bien para

devSpartan
fuente
1
Incluya qué entorno usa para poder insertar %matplotlib inline(este no es Python estándar que se puede usar en un script).
Basj
%matplotlib inlinese utiliza en el cuaderno ipython / jupyter ...
Yatin
Sí, no es necesario agregar% matplotlib en línea si está usando un IDE como pycharm (lo he estado usando).
devSpartan
0

Las otras respuestas implican importar matplotlib.pyploty / o llamar a alguna segunda función manualmente.

En su lugar, puede configurarlo matplotlibpara estar en modo interactivo con sus archivos de configuración .

Simplemente agregue la línea

interactive: True

a un archivo llamado matplotlibrcen uno de los siguientes lugares:

  • En el directorio de trabajo actual
  • En el directorio de usuarios específico de la plataforma especificado por matplotlib.get_configdir()
    • En un sistema similar a Unix, normalmente /home/username/.config/matplotlib/
    • En Windows C:\\Documents and Settings\\username\\.matplotlib\\
tejón
fuente