2016-11-24 209 views
1

我得到了需要分类的data.frame列表,我没有操作这些列表并最终将它们导出为默认文件夹中的csv文件。但是,为了使这些导出的数据更具信息性,我认为最好为每个data.frame对象生成分组条形图或饼图。作为一名初学者,我仍然在学习ggplot2软件包的特性,所以我不知道如何轻松做到这一点。任何人都可以给我一些可能的想法,如何轻松生成分组条形图?如何为文件列表生成信息良好的条形图?我怎样才能做到这一点?任何想法 ?感谢提前:)如何从csv文件列表生成分组条形图或饼图?

重复性的数据:

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

你想让酒吧情节看起来像什么?例如,你的'DF'有几个变量,你想在酒吧里说明一下吗? (例如x = seq,y =分数) –

+0

功能数量,如变量数量? –

+1

@ Jerry.Shad行通常是观察值,而不是变量。 – Axeman

回答

4

如果我理解正确,这可能对您有用,作为粗略解决方案。请评论让我知道这是否可以接受。将来,如果您可以提供粗略的草图和数据,以显示您想要实现的目标,那将是一个好主意。

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

酒吧,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包。阅读他们的文档和小插曲,并通过例证工作。最好的学习方式就是通过做。

+0

我可以得到饼图吗?谢谢:) – Jerry

+0

这真的很酷。我绝对遵循你的建议。非常感谢 ;) – Jerry