我得到了需要分类的data.frame列表,我确实操作了这些列表,最后将它们导出为默认文件夹中的csv文件。但是,为了使这些导出的数据更具信息性,我认为最好为每个data.frame对象生成分组条形图或饼图。作为一个初学者,我还在学习ggplot2包的功能,所以我不知道如何轻松地做到这一点。任何人都可以给我提供如何轻松生成分组条形图的想法吗?如何为文件列表生成信息丰富的条形图?我怎样才能做到这一点?任何的想法 ?在此先感谢:)
可重现的数据:
savedDF <- list(
bar.saved = data.frame(start=sample(100, 15), stop=sample(150, 15), score=sample(36, 15)),
cat.saved = data.frame(start=sample(100, 20), stop=sample(100,20), score=sample(45,20)),
foo.saved = data.frame(start=sample(125, 24), stop=sample(140, 24), score=sample(32, 24))
)
dropedDF <- list(
bar.droped = data.frame(start=sample(60, 12), stop=sample(90,12), score=sample(35,12)),
cat.droped = data.frame(start=sample(75, 18), stop=sample(84,18), score=sample(28,18)),
foo.droped = data.frame(start=sample(54, 14), stop=sample(72,14), score=sample(25,14))
)
所以我从这个管道获取csv文件列表:
comb <- do.call("rbind", c(savedDF, dropedDF))
cn <- c("letter", "saved","seq")
DF <- cbind(read.table(text = chartr("_", ".", rownames(comb)), sep = ".", col.names = cn), comb)
DF <- transform(DF, updown = ifelse(score>= 12, "stringent", "weak"))
by(DF, DF[c("letter", "saved", "updown")],
function(x) write.csv(x[-(1:3)],
sprintf("%s_%s_%s.csv", x$letter[1], x$updown[1], x$saved[1])))
为了更好地理解导出的数据,我认为为每个data.frame对象生成分组条形图和饼图将提供很多信息。
在所需的图中,我打算在每个data.frame对象的每个csv文件中看到许多功能。任何人都可以给我创意来完成这项任务吗?
如何使用ggplot2包轻松实现这一目标?有没有办法更有效地完成这项工作?非常感谢
答案 0 :(得分:3)
如果我理解正确,这对你来说可能是一个粗略的解决方案。如果可以接受,请发表评论告诉我。将来,如果您可以提供粗略的草图以及您的数据,以显示您想要实现的目标,那将是一个好主意。
library(dplyr)
library(ggplot2)
plot_data <- DF %>%
group_by(letter, saved, updown) %>%
tally %>%
group_by(saved, updown) %>%
mutate(percentage = n/sum(n))
ggplot(plot_data, aes(x = saved, y = n, fill = saved)) +
geom_bar(stat = "identity") +
facet_wrap(~ letter + updown, ncol = 2)
如果您愿意,可以随时将facet_wrap(~ letter + updown, ncol = 2)
更改为明确的facet_grid(letter ~ updown)
。
或者您可以这样查看:
ggplot(plot_data, aes(x = letter, y = n)) +
geom_bar(stat = "identity") +
facet_wrap(~updown+saved, ncol = 2)
对于馅饼(清理和贴标由您决定):
ggplot(plot_data, aes(x = 1, y = percentage, fill = letter)) +
geom_bar(stat = "identity", width =1) +
facet_wrap(~updown+saved, ncol = 2) +
coord_polar(theta = "y") +
theme_void()
bar,4交互派只需要对数据进行一些操作:
library(dplyr)
library(tidyr)
library(ggplot2)
plot_data <- DF %>%
unite(interaction, saved, updown, sep = "-") %>%
group_by(letter, interaction) %>%
tally %>%
mutate(percentage = n/sum(n)) %>%
filter(letter == "bar")
ggplot(plot_data, aes(x = 1, y = percentage, fill = interaction)) +
geom_bar(stat = "identity", width =1) +
coord_polar(theta = "y") +
theme_void()
您应该真正关注dplyr
,tidyr
和ggplot2
个软件包。阅读他们的文档和小插图,并通过exmaples工作。最好的学习方法是做。