【问题标题】:r stacked bar total valuer 堆积条形总值
【发布时间】:2016-06-27 16:08:23
【问题描述】:

我想创建一个关于从房屋(房屋中的设备)收集的数据的图 (EDA)。但我被卡住了..

数据是这样的:

df$device    df$date       df$time    df$value
boiler       2015-01-13    12:15      0.0009
boiler       2015-01-13    12:30      0.0007
boiler       2015-01-13    12:45      0.0005
boiler       2015-01-13    13:00      0.0010
TV           2015-01-13    12:15      0.0009
TV           2015-01-13    12:30      0.0007
TV           2015-01-13    12:45      0.0005
TV           2015-01-13    13:00      0.0010
boiler       2015-01-14    12:15      0.0009
boiler       2015-01-14    12:30      0.0007
boiler       2015-01-14    12:45      0.0005
boiler       2015-01-14    13:00      0.0010
TV           2015-01-14    12:15      0.0009
TV           2015-01-14    12:30      0.0007
TV           2015-01-14    12:45      0.0005
TV           2015-01-14    13:00      0.0010

数据是在 8 个月(1 月至 9 月)内测量的。我想制作一个情节,其中: Y-轴 = 测量值 X 轴 = 月 绘图 = 所有设备

我试过了:

df$monthnumber <- month(df$Date)
test <- table(df$Device, df$monthnumber)

barplot(counts1,col=rainbow(7), xlim = c(1,15),
        legend = c(rownames(counts1)), bty = "L") 

导致下一张图片的原因:

结果: 但是,这是错误的。因为它包含测量设备的频率。我不知道如何为每个应用程序添加每月的总价值(总和)。

我试过了:

test$value <- aggregate (df$Measurevalue, by = list(genergy$Device), sum)

但是报错了:

$tmp, "value", value = list(Group.1 = c("Boiler", :
替换有7行,数据有285896

我该如何解决这个问题? - 一个堆叠的条形图,带有每个设备的 TOTAL VALUE,带有 (y= energy)、(X= months)

【问题讨论】:

  • 你试过用ggplot绘图吗?
  • 是的,但主要问题是获得值的总和。在我的情况下它不起作用,因为(我猜)数据帧与 lengt 不同。但我真的不知道如何解决这个问题。
  • 所以: - 带有月份数字 (x) - 带有测量值 (y) - 带有总值(在栏中)而且我不明白如何添加(到我的表中)一个额外的变量每个设备的测量值)

标签: r plot stacked


【解决方案1】:

所以,您可以使用dplyrggplot 的组合

library("dplyr")
library("ggplot2")

df <- data.frame(device = c("boiler","boiler","boiler","boiler","TV","TV","TV","TV","boiler","boiler","boiler","boiler","TV","TV","TV","TV"), 
                     date = c("2015-01-13","2015-01-13","2015-01-13","2015-01-13","2015-01-13","2015-01-13","2015-01-13","2015-01-13","2015-01-14","2015-01-14","2015-01-14","2015-01-14","2015-01-14","2015-01-14","2015-01-14","2015-01-14"),
                     time = c("12:15","12:30","12:45","13:00","12:15","12:30","12:45","13:00","12:15","12:30","12:45","13:00","12:15","12:30","12:45","13:00"),
                     value = c(0.009,0.007,0.005,0.001,0.009,0.007,0.005,0.001,0.009,0.007,0.005,0.001,0.009,0.007,0.005,0.001)
                     )
    df <- mutate(df,device = as.factor(device),
                 date = as.Date.character(date,format = "%Y-%m-%d")) %>%
      group_by(device) %>%
        mutate(sum(value))

结果是每天按设备进行的汇总

正如您在评论中提到的,您希望每月执行一次 - 根据月份对表格进行分组

df<- group_by(df,m=as.factor(month(date)),device) %>%
summarise(s = sum(value))
ggplot(df,aes(x=m,y=s,fill=device)) + geom_bar(stat="identity")

由于我没有足够的月度数据,图表如下所示。

更新:2016 年 6 月 27 日 输入数据后,运行以下命令。然后尝试根据月份汇总数据。

    df <- mutate(df,device = as.factor(device),
                  date = as.POSIXct((strftime(date,format = "%Y-%m-%d")))) %>%
         group_by(device)

【讨论】:

  • 谢谢,但我的数据包含近 800,000 行。所以在例如之后device = c("boiler"....) 是否可以自动执行此操作?
  • 非常感谢!但是当我运行你的第二个代码时: df% summarise(s = sum(value)) ggplot(df,aes(x=m ,y=s,fill=device)) + geom_bar(stat="identity") 我得到这个错误: eval 中的错误(expr,envir,enclos):不知道如何将'x'转换为类“POSIXlt”
  • 类(df$Date) --> "日期"
  • 谢谢,我感觉我快到了,但出现了一个新错误: eval(expr, envir, enclos) 中的错误:找不到对象'm' 虽然,第一个我运行代码块的时间: plotje % summarise(s = sum(value)) 它没有给出错误(直到我想运行ggplot)。所以我不明白为什么 m 没有找到。 (因为我将 m 分配给 as.factor(month(date)))
  • ggplot(plotje,aes(x= m,y= s,fill=device)) + geom_bar(stat="identity")
猜你喜欢
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 2022-08-19
  • 1970-01-01
  • 2023-03-17
  • 2015-08-09
  • 1970-01-01
相关资源
最近更新 更多