Python pandas在一个图上绘制多个图

问题描述 投票:0回答:1

我有一个看起来像这样的数据集。

Date Name High Value
2017-12-31 Bitcoin 14377.40 18723.76 2017-12-30 Bitcoin 14681.90 18766.88 2017-12-29 Bitcoin 15279.00 18755.70 2017-12-28 Bitcoin 15888.40 18820.54 ... ... ... ... 2017-01-08 CannaCoin 0.01 0.02 2017-01-07 CannaCoin 0.01 0.02 2017-01-06 CannaCoin 0.01 0.02 2017-01-05 CannaCoin 0.02 0.01

Date是索引列,采用日期时间格式。我的数据集很大,并且在Namecolumn中有多个项目。日期范围从年初到结束。此外,并非所有项目都具有相同的长度。大多数应该在年底完成,但它们不一定从一开始就开始,它们可以在以后开始。

我想做的是,按照Namevalues分组,并为每个在同一图表/图上创建一个单独的行。 Value应该在y轴上。

因为我习惯了R,我所做的是:df.groupby("Name")["Value"].plot()

我得到的是一个警告:

UserWarning: Attempting to set identical left==right results in singular transformations; automatically expanding. left=17531.0, right=17531.0 'left=%s, right=%s') % (left, right))

此外,情节看起来像这样:Half a graph missing, dates are in the wrong order

作为可观察的,一半的值丢失,因为它们在绘图区域之外,日期是降序而不是升序,并且一半的图是空的。

我该如何解决这个问题,以便整个情节可见,日期顺序正确?

python pandas matplotlib plot
1个回答
1
投票

您可以在“名称”上进行旋转,然后将数据框传递给绘图。

pd.pivot_table(data=df, values="Value",columns="Name",index="Date").plot()

例:

In[]:
idx = ["2017-12-28","2017-12-29","2017-12-30","2017-12-31"] * 2
name = ['Bitcoin'] * 4 + ['CannaCoin'] * 4
vals = np.random.rand(8) * 1000
df = pd.DataFrame({"Date":idx, "Name":name, "Value":vals})
print(df)

Out[]:
         Date       Name       Value
0  2017-12-28    Bitcoin  788.547631
1  2017-12-29    Bitcoin  572.695484
2  2017-12-30    Bitcoin  661.859195
3  2017-12-31    Bitcoin  205.473883
4  2017-12-28  CannaCoin  270.291858
5  2017-12-29  CannaCoin  683.827404
6  2017-12-30  CannaCoin  447.808772
7  2017-12-31  CannaCoin  616.927833

In[]:
pd.pivot_table(data=df, values="Value",columns="Name",index="Date").plot()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.