将 pandas.Series 直方图保存到文件
Posted
技术标签:
【中文标题】将 pandas.Series 直方图保存到文件【英文标题】:save a pandas.Series histogram plot to file 【发布时间】:2013-09-30 06:54:06 【问题描述】:在ipython Notebook中,首先创建一个pandas Series对象,然后调用实例方法.hist(),浏览器显示图形。
我想知道如何将此图保存到文件中(我的意思不是右键单击并另存为,而是脚本中需要的命令)。
【问题讨论】:
这个问题是针对一列的单个图。请参阅Saving plots (AxesSubPlot) generated from python pandas with matplotlib's savefig 处理绘制多列的子图。 【参考方案1】:您可以像这样简单地保存您的(例如直方图)图:
df.plot.hist().get_figure().savefig('name')
【讨论】:
【参考方案2】:只是想补充一点,默认分辨率是 100dpi,这对屏幕来说很好,但如果你想放大或打印它就不行了。您可以传递 'dpi' 参数来获取高分辨率文件:
ax = s.hist() # s is an instance of Series
ax.figure.savefig('/path/to/figure.png', dpi=300)
【讨论】:
【参考方案3】:使用Figure.savefig()
方法,如下所示:
ax = s.hist() # s is an instance of Series
fig = ax.get_figure()
fig.savefig('/path/to/figure.pdf')
它不必以pdf
结尾,有很多选择。查看the documentation。
或者,您可以使用pyplot
接口并将savefig
作为函数调用以保存最近创建的图形:
import matplotlib.pyplot as plt
s.hist()
plt.savefig('path/to/figure.pdf') # saves the current figure
多列绘图
添加自 2018 年 5 月 11 日发表的评论 toto_tico 如果您收到此错误AttributeError: 'numpy.ndarray' object has no attribute 'get_figure'
,那么您很可能正在绘制多个列。
在这种情况下,ax
将是所有轴的数组。
ax = s.hist(columns=['colA', 'colB'])
# try one of the following
fig = ax[0].get_figure()
fig = ax[0][0].get_figure()
fig.savefig('figure.pdf')
【讨论】:
这些技术似乎无法保存标签。只保存图表的核心。【参考方案4】:你可以使用ax.figure.savefig()
:
import pandas as pd
s = pd.Series([0, 1])
ax = s.plot.hist()
ax.figure.savefig('demo-file.pdf')
正如 Philip Cloud 的回答中所建议的那样,这与 ax.get_figure().savefig()
相比没有实际好处,因此您可以选择您认为最美观的选项。其实get_figure()
simply returns self.figure
:
# Source from snippet linked above
def get_figure(self):
"""Return the `.Figure` instance the artist belongs to."""
return self.figure
【讨论】:
以上是关于将 pandas.Series 直方图保存到文件的主要内容,如果未能解决你的问题,请参考以下文章
将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)
pandas.series.rolling.apply 方法似乎将 Series 隐式转换为 numpy 数组
pandas将DatetimeIndex格式的日期索引(index)数据转化为pandas Series数据