在脚本(不是IPython)中使用此脚本时,什么也没有发生,即绘图窗口不出现:
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()
即使添加time.sleep(5),也什么也没有。为什么?
有没有一种方法,而不必手动调用matplotlib?
在脚本(不是IPython)中使用此脚本时,什么也没有发生,即绘图窗口不出现:
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()
即使添加time.sleep(5),也什么也没有。为什么?
有没有一种方法,而不必手动调用matplotlib?
import matplotlib.pyplot as plt,plt.show()
ts.plot(),什么也没有发生,程序在此之后立即终止。即使我time.sleep(10)没有添加任何内容,也没有显示
.plot()对panda对象执行操作将为我处理所有事情(即pandas代替我执行matplotlib的工作):请参见此示例。
Answers:
绘制完绘图后,需要告知matplotlib show。做事的通常方法是从那里导入matplotlib.pyplot并调用show:
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()
由于您已请求不要这样做(为什么?),因此可以使用以下[注意:这似乎不再适用于更新版本的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()
但是您在这里所做的所有工作都是在中找到matplotlib已导入的地方pandas,然后show从那里调用相同的函数。
您是否要避免打电话matplotlib来加快速度?如果是这样,那么您实际上并没有加快速度,因为pandas已经导入了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
最后,您在注释中链接的示例不需要调用matplotlib的原因是因为它是在iPython notebook而不是脚本中以交互方式运行的。
我刚刚
import matplotlib.pyplot as plt
%matplotlib inline
并添加行
plt.show()
在df.plot()旁边,效果很好
%matplotlib inline(这不是可在脚本中使用的标准Python)。
%matplotlib inline在ipython / jupyter笔记本中使用...
ts.plot()吗?