如何在嵌套列表中获取data.frame的堆栈图?

时间:2016-11-25 14:25:41

标签: r gridview dataframe ggplot2

在我按给定的阈值分割后,我在嵌套列表中得到了data.frame。但是,我将生成堆栈条形图,以使数据更具信息性和易于理解。我认为使用ggplot2包可能是不错的选择,但我对使用这个包很新,这样做不直观。如何在嵌套列表中获取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的堆栈条形图?如何实现我想要的输出图?非常感谢

2 个答案:

答案 0 :(得分:2)

您可能无法直接获得这些图表。但我认为你会得到这个想法。关键是你需要以适当的格式获取数据才能进行绘图。

这里我做了一些数据操作,用于将数据导入数据框。

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()

你会得到这样的情节。enter image description here

答案 1 :(得分:0)

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))

enter image description here