【问题标题】:Python pandas plotting multiple graphs on one plotPython pandas 在一张图上绘制多个图
【发布时间】:2018-01-22 22:07:16
【问题描述】:

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

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

日期是索引列,采用日期时间格式。我的数据集很大,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))

另外,情节是这样的:

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

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

【问题讨论】:

标签: python pandas matplotlib plot


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-10
    • 2023-03-24
    • 2012-01-14
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2013-01-14
    相关资源
    最近更新 更多