如何从csv文件列表生成分组条形图或饼图?

时间:2016-11-24 14:24:23

标签: r csv ggplot2

我得到了需要分类的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包轻松实现这一目标?有没有办法更有效地完成这项工作?非常感谢

1 个答案:

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

enter image description here

如果您愿意,可以随时将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)

enter image description here

对于馅饼(清理和贴标由您决定):

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

enter image description here

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

enter image description here

您应该真正关注dplyrtidyrggplot2个软件包。阅读他们的文档和小插图,并通过exmaples工作。最好的学习方法是做。