gpt4 book ai didi

pandas - 如何在 pandas plot() 中自动推断轴

转载 作者:行者123 更新时间:2023-12-01 15:30:49 25 4
gpt4 key购买 nike

我正在努力复制优雅的轻松 - 和成功的结果 - 在 pandas df.plot() 文档的“基本绘图:绘图”部分中戏弄地 promise :

http://pandas.pydata.org/pandas-docs/stable/visualization.html#visualization

作者的第一张图片非常接近我想从我的数据框中绘制的那种线图。他们的第一个 df 和结果图是单线的,就像我希望下面的 df 在绘制时看起来一样。

我的 df 看起来像这样:

            2014-03-28  2014-04-04  2014-04-11  2014-04-18  \
Jenny Todd 1699.6 1741.6 1710.7 1744.2

2014-04-25 2014-05-02 2014-05-09
Jenny Todd 1764.2 1789.7 1802.3

他们的第二张图片是一个多线图,与我尝试绘制 df 的多索引版本时所希望的非常相似。例如:

                    2014-06-13  2014-06-20  2014-06-27  \
William Acer 1674.7 1689.4 1682.0
Katherine Baker 1498.5 1527.3 1530.5


2014-07-04 2014-07-11 2014-07-18 \
William Acer 1700.0 1674.5 1677.8
Katherine Baker 1540.4 1522.3 1537.3

2014-07-25
William Acer 1708.0
Katherine Baker 1557.1

然而,他们得到了阴谋。我得到无特征的 3.3kb 图像和警告:

/home/lee/test/local/lib/python2.7/site-packages/matplotlib/axes/_base.py:2787: UserWarning: 尝试设置相同的 left==right 导致奇异变换;自动展开。左=0.0,右=0.0 '左=%s, 右=%s') % (左, 右))

文档的作者似乎有 plot() 函数从 df 的索引中推导出 x 轴的值以及 y 轴的范围和值。

四处搜索,我可以找到具有不同数据、不同索引和不同场景(例如,将一列与另一列进行对比或尝试生成多个子图)的人遇到这种“轴”错误。但是,我无法将他们的问题映射到我的问题上。

我想知道是否有人可以帮助解决我的数据或代码与文档看似相似的数据和看似相似的代码导致不同绘图结果的不同之处。

我的代码:

print plotting_df # (This produces the df examples I pasted above)
plottest = plotting_df.plot.line(title='Calorie Intake', legend=True)
plottest.set_xlabel('Weeks')
plottest.set_ylabel('Calories')
fig = plt.figure()
plot_name = week_ending + '_' + collection_name + '.png'
fig.savefig(plot_name)

请注意,此数据框在脚本中多次动态创建。在任何给定的运行中,脚本将获取不同的日期集、不同的人名和不同的数字来绘制。因此,我无法预测哪些字符串会出现在索引和图例标签中以供事​​先绘制。我确实对格式有预见性。

我了解到我的数据框的日期索引的日期格式与引用文档中描述的不同。这是原因吗?不管是不是,应该如何最好地处理这个问题?

添加于 2016-08-24 以回答以下关于无法重新创建我的数据的评论

plotting_df 是作为更大数据帧的子集动态创建的。它只是一个索引(有时是多个索引)和一些从较大数据框中提取的日期列。生成 plotting_df 的代码运行良好,并且始终以我期望的格式生成具有正确索引和列的 plotting_df。

我可以使用此 python 代码模拟创建数据集以存储在 plotting_df 中:

plotting_1 = {
'2014-03-28': 1699.6,
'2014-04-04': 1741.6,
'2014-04-11': 1710.7,
'2014-04-18': 1744.2,
'2014-04-25': 1764.2,
'2014-05-02': 1789.7,
'2014-05-09': 1802.3
}

plotting_df = pd.DataFrame(plotting_1, index=['Jenny Todd'])

我可以用这个 python 代码模拟多索引 plotting_df 的创建:

plotting_2 = {
'Katherine Baker': {
'2014-06-13': 1498.5,
'2014-06-20': 1527.3,
'2014-06-27': 1530.5,
'2014-07-04': 1540.4,
'2014-07-11': 1522.3,
'2014-07-18': 1537.3,
'2014-07-25': 1557.1
},
'William Acer': {
'2014-06-13': 1674.7,
'2014-06-20': 1689.4,
'2014-06-27': 1682.0,
'2014-07-04': 1700.0,
'2014-07-11': 1674.5,
'2014-07-18': 1677.8,
'2014-07-25': 1708.0
}
}

plotting_df = pd.DataFrame.from_dict(plotting_2)

我确实尝试了建议的代码转换:

plotdf = plotting_df.T
plotdf.index = pd.to_datetime(plotdf.index)

这样我的原始代码现在看起来像:

print plotting_df # (This produces the df examples I pasted above)
plotdf = plotting_df.T # Transform the df - date columns to indices
plotdf.index = pd.to_datetime(plotdf.index) # Convert indices to datetime
plottest = plotdf.plot.line(title='Calorie Intake', legend=True)
plottest.set_xlabel('Weeks')
plottest.set_ylabel('Calories')
fig = plt.figure()
plot_name = week_ending + '_' + collection_name + '.png'
fig.savefig(plot_name)

但我仍然得到相同的结果(创建了空白的 3.3kb 图像)。

我确实注意到,当我打印出 plotdf 的第一个实例时,添加转换没有任何区别。那么我应该做一些其他的转换吗?

最佳答案

这是你的问题:

fig = plt.figure()
plot_name = week_ending + '_' + collection_name + '.png'
fig.savefig(plot_name)

您在创建第一个图形后创建第二个图形,然后您只保存第二个空图形。只需取出 fig = plt.figure() 行并将 fig.savefig 更改为 plt.savefig

所以你应该有:

print plotting_df # (This produces the df examples I pasted above)
plotdf = plotting_df.T # Transform the df - date columns to indices
plotdf.index = pd.to_datetime(plotdf.index) # Convert indices to datetime
plottest = plotdf.plot.line(title='Calorie Intake', legend=True)
plottest.set_xlabel('Weeks')
plottest.set_ylabel('Calories')
plot_name = week_ending + '_' + collection_name + '.png'
plt.savefig(plot_name)

关于pandas - 如何在 pandas plot() 中自动推断轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39055548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com