在我按给定的阈值分割后,我在嵌套列表中得到了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的堆栈条形图?如何实现我想要的输出图?非常感谢
答案 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()
答案 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))