【问题标题】:Plotnine print one line for each entry in DataFramePlotnine 为 DataFrame 中的每个条目打印一行
【发布时间】:2020-11-17 14:42:34
【问题描述】:

我有以下数据集:

    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 而不是 geom_point 运行 plotnine 行时,我得到了这个情节:

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

这个情节应该按variable分组,所以我知道这条线属于哪个variable。 我该怎么做?

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

亲切的问候

【问题讨论】:

    标签: python r ggplot2 python-ggplot plotnine


    【解决方案1】:

    如果没有实际数据,很难为您提供深入的帮助,请参阅this site 以获得可重复示例的指南。我使用了您发布的数据并复制了一些价值变化来说明解决方案。如果您在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()
    

    【讨论】:

    • 但是为什么要在 x 轴上给我一个范围?我想在每个条目的 y 轴上画一条线,而不是一个范围!
    • 我不确定我是否理解。在我的示例中,您在 y 轴方向上得到一条线。这不是你的意思吗?如果您发布一个可重现的示例(您的部分数据和相应的图表),我可以更好地帮助您。请参阅我发布的链接。
    • 知道,我想在 y 轴上为每个条目设置一行 :)
    • 如果这是您的想法,请查看编辑。否则,您需要解释更多/创建可重现的示例。
    • 不,没关系。但是为什么这些线没有连接呢?
    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多