Pandas plot doesn't show

前端 未结 4 805

When using this in a script (not IPython), nothing happens, i.e. the plot window doesn\'t appear :

import numpy as np
import pandas as pd
ts = pd.Series(np.r         


        
相关标签:
4条回答
  • 2020-12-04 21:12

    Once you have made your plot, you need to tell matplotlib to show it. The usual way to do things is to import matplotlib.pyplot and call show from there:

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

    Since you have requested not to do that (why?), you could use the following [NOTE: This no longer appears to work with newer versions of 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()
    

    But all you are doing there is finding somewhere that matplotlib has been imported in pandas, and calling the same show function from there.

    Are you trying to avoid calling matplotlib in an effort to speed things up? If so then you are really not speeding anything up, since pandas already imports 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
    

    Finally, the reason the example you linked in comments doesn't need the call to matplotlib is because it is being run interactively in an iPython notebook, not in a script.

    0 讨论(0)
  • 2020-12-04 21:14

    In case you are using matplotlib, and still, things don't show up in iPython notebook (or Jupyter Lab as well) remember to set the inline option for matplotlib in the notebook.

    import matplotlib.pyplot as plt
    
    %matplotlib inline
    

    Then the following code will work flawlessly:

    fig, ax = plt.subplots(figsize=(16,9));
    change_per_ins.plot(ax=ax, kind='hist')
    

    If you don't set the inline option it won't show up and by adding a plt.show() in the end you will get duplicate outputs.

    0 讨论(0)
  • 2020-12-04 21:15

    The other answers involve importing matplotlib.pyplot and/or calling some second function manually.

    Instead, you can configure matplotlib to be in interactive mode with its configuration files.

    Simply add the line

    interactive: True

    to a file called matplotlibrc in one of the following places:

    • In the current working directory
    • In the platform specific user directory specified by matplotlib.get_configdir()
      • On unix-like system, typically /home/username/.config/matplotlib/
      • On Windows C:\\Documents and Settings\\username\\.matplotlib\\
    0 讨论(0)
  • 2020-12-04 21:28

    I did just

    import matplotlib.pyplot as plt
    
    %matplotlib inline
    

    and add line

    plt.show()
    

    next to df.plot() and it worked well for

    0 讨论(0)
提交回复
热议问题