首页 > 解决方案 > Plotnine 为 DataFrame 中的每个条目打印一行

问题描述

我有以下数据集:

    intervall_start     intervall_ende      variable        value   time
0   2019-08-01 05:00:00 2019-08-01 05:15:00 Door_1          30.0    5.00
1   2019-08-01 05:15:00 2019-08-01 05:30:00 Door_1          55.0    5.25
2   2019-08-01 05:45:00 2019-08-01 06:00:00 Door_2          114.0   5.75
3   2019-08-01 06:00:00 2019-08-01 06:15:00 Door_1          84.0    6.00
4   2019-08-01 06:15:00 2019-08-01 06:30:00 Door_2          23.0    6.25
... 

当我运行pn.ggplot(df, pn.aes(x="time", y="value", colour="variable")) + pn.geom_point(stat="identity") + pn.theme(axis_text_x = pn.element_text(angle=90))它时,它给了我这个情节:

在此处输入图像描述

geom_line当我用而不是运行 plotnine 线时,geom_point我得到了这个图: 在此处输入图像描述

但这不是我想要的!MyDataFrame包含从2018-08-01到 的许多值2018-08-31。该列time是每天的时间,独立于它发生的日期。我现在的目标是为每个time. 所以我会得到96行。为什么是96?因为我有 15 分钟的间隔,而一天有 24 小时 -> 24 * 4 = 96

这个情节应该分组,variable所以我知道这variable条线属于哪条线。我怎样才能做到这一点?

这就是我最后想要的。我想按时间和价值每天有一条线。颜色应该说明变量!看一下 x 轴,这是从 0 到 24,因为一天有 24 小时。列时间为我们提供了一天中的时间!

在此处输入图像描述

亲切的问候

标签: pythonrggplot2python-ggplotplotnine

解决方案


如果没有实际数据,很难为您提供深入的帮助,请参阅此站点以获取可重复示例的指南。我使用了您发布的数据并复制了一些价值变化来说明解决方案。如果你将时间变量定义为组,geom_line它会产生接近你想要的东西。我不确定您的原始数据是否有进一步的复杂性,因为您必须创建一个可重现的示例。

    df = tibble::tribble(
       ~intervall_start, ~intervall_ende, ~variable, ~value, ~time,
  "2019-08-01 05:00:00","2019-08-01 05:15:00", "Door_1", 30.0, 5.00,
  "2019-08-01 05:15:00","2019-08-01 05:30:00", "Door_1", 55.0, 5.25,
  "2019-08-01 05:45:00","2019-08-01 06:00:00", "Door_2", 114.0, 5.75,
  "2019-08-01 06:00:00","2019-08-01 06:15:00", "Door_1", 84.0, 6.00,
  "2019-08-01 06:15:00","2019-08-01 06:30:00", "Door_2", 23.0, 6.25,
  "2019-08-01 05:00:00","2019-08-01 05:15:00", "Door_1", 31.0, 5.00,
  "2019-08-01 05:15:00","2019-08-01 05:30:00", "Door_1", 51.0, 5.25,
  "2019-08-01 05:45:00","2019-08-01 06:00:00", "Door_2", 111.0, 5.75,
  "2019-08-01 06:00:00","2019-08-01 06:15:00", "Door_1", 81.0, 6.00,
  "2019-08-01 06:15:00","2019-08-01 06:30:00", "Door_2", 21.0, 6.25,
  "2019-08-01 05:00:00","2019-08-01 05:15:00", "Door_1", 33.0, 5.00,
  "2019-08-01 05:15:00","2019-08-01 05:30:00", "Door_1", 53.0, 5.25,
  "2019-08-01 05:45:00","2019-08-01 06:00:00", "Door_2", 113.0, 5.75,
  "2019-08-01 06:00:00","2019-08-01 06:15:00", "Door_1", 83.0, 6.00,
  "2019-08-01 06:15:00","2019-08-01 06:30:00", "Door_2", 23.0, 6.25
  )

ggplot(df, aes(x=time, y=value, colour=variable, group = time)) +
  geom_line()

在此处输入图像描述

编辑: 你在追求这样的事情吗?如果不是,您必须创建一个可重现的示例并再次解释您想要什么。

ggplot(df, aes(x=intervall_start, xend = intervall_ende, y=value, yend=value, colour=variable)) +
  geom_segment()

在此处输入图像描述


推荐阅读