2016-11-24 55 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