python - 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 小时。列时间为我们提供了一天中的时间!
亲切的问候
解决方案
如果没有实际数据,很难为您提供深入的帮助,请参阅此站点以获取可重复示例的指南。我使用了您发布的数据并复制了一些价值变化来说明解决方案。如果你将时间变量定义为组,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()
推荐阅读
- java - 获取两个图顶点之间的边列表
- javascript - 在从 redux 接收更改的 prop 时设置输入值
- python - 如何使用 keras 在 LSTM 中实现多元回归的输入?
- php - 如何在 woocommerce 帐户页面中删除“我是客户”和“我是供应商”的单选按钮?
- ios - ARKIT:SKVideoNode 在节点不在场景时继续播放,暂停不起作用
- java - 此代码是否支持相互身份验证,如果是,如何触发它?
- pytest - --disable-warnings + "ra" 选项在 pytest.ini 中不能很好地叠加
- python - 使用python通过UART接收数据
- mongodb - windows下如何启动mongodb服务
- haskell - 学习 Haskell:where-clause 变量 x,它从何而来?