【问题标题】:How can I get stack plot for data.frame in the nested list?如何在嵌套列表中获取 data.frame 的堆栈图?
【发布时间】:2017-04-09 23:32:56
【问题描述】:

在按给定阈值拆分嵌套列表后,我在嵌套列表中得到了 data.frame。但是,我将生成堆栈条图,以使数据更具信息性和易于理解。我认为使用 ggplot2 包可能是不错的选择,但我对使用这个包很陌生,这样做并不直观。如何在嵌套列表中获取 data.frame 的堆栈条图?有什么方法可以轻松获取 data.frame 对象的条形图或饼图?有什么想法吗?

迷你数据:

myList <- list(
  hola= data.frame( from=seq(1, by=4, len=15), to=seq(3, by=4, len=15), value=sample(30, 15)),
  boo = data.frame( from=seq(3, by=7, len=20), to=seq(6, by=7, len=20), value=sample(45, 20)),
  meh = data.frame( from=seq(4, by=8, len=25), to=seq(7, by=8, len=25), value=sample(36, 25))
)

辅助功能:

splitter <- function(mlist, threshold) {
  res <- lapply(mlist, function(x) {
    splt <- split(x, ifelse(x$value >= threshold, "pass", "fail"))
  })
  return(res)
}

#' @example 
splitMe <- splitter(myList, threshold = 10)

我想使用 ggplot2 包生成堆栈条形图、饼图。我怎样才能让这很容易发生?谁能指点我如何完成这项任务?

如何在嵌套列表中获取 data.frame 的堆栈条图?如何实现我想要的输出图?非常感谢

【问题讨论】:

    标签: r gridview dataframe ggplot2


    【解决方案1】:

    您可能无法直接使用此图表获得这些图表。但我想你会明白的。关键是您需要以正确的格式获取数据才能进行绘图。

    在这里,我做了一些数据操作,以便将数据放入数据框中。

    df=as.data.frame(unlist(lapply(splitMe,function(x) unlist(x))))
    df$col=row.names(df)
    names(df)[1]='val';row.names(df)=NULL
    

    您可以使新列更具动态性。

    df$col=gsub(paste("\\.|*[0-9]",lapply(splitMe[[1]], function(x) paste(names(x), collapse = "|"))[1], collapse = "", sep = "|"),"",df$col)
    df$col1=gsub(paste(lapply(splitMe, function(x) paste(names(x), collapse = "|"))[1], collapse = "", sep = "|"),"",df$col)
    df$col2=gsub(paste(names(splitMe), collapse = "|"),"",df$col)
    

    现在我得到了 ggplot 可以轻松使用的格式的数据。

    library(ggplot2)
    ggplot(data = df, aes(x = col1,  fill = col2)) + geom_bar()
    

    你会得到这样的情节。

    【讨论】:

    • 您必须获取列表名称并相应地提供它们以使其动态化。对于饼图,请查看here
    • 谢谢。有没有机会让您的解决方案更具活力?我的意思是,列表的名称和列可以通过不同的输入列表进行更改。作为初学者,我可以对此有更多的了解吗?抱歉这个问题。
    • 获取列表名称可能更加动态。查看编辑。
    • 如何在每个data.frame中用相应的名称明确表示观察次数?
    • 我想你在找this
    【解决方案2】:
    I get inspiration form Chirayu Chamoli' solution :
    
    plot_data <- df %>% 
      group_by(col1, col, col2) %>% 
      tally %>% 
      group_by(col, col2) %>% 
      mutate(percentage = n/sum(n), cumsum = cumsum(percentage))
    
    
    library(ggplot2)
    ggplot(data = plot_data, aes(x = col1,  y=n ,fill = col2, width = .85)) + 
      geom_bar(stat = "identity")+
      geom_text(aes(label=n), position = position_stack(vjust = .5))
    

    【讨论】:

      猜你喜欢
      • 2017-05-01
      • 1970-01-01
      • 2020-01-27
      • 2017-05-16
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      相关资源
      最近更新 更多