2014-11-03 94 views
1

我的挑戰是一次繪製幾個條形圖,即不同子集的每個變量的繪圖。我的目標是比較每個變量的區域差異。我想通過R Markdown將所有生成的圖表打印到html文件中。繪製循環中的幾個分組條形圖[R]

我在製作自動分組條形圖時遇到的主要困難是,您需要使用table(data$Var[i], data$Region)製表組,但我不知道如何自動執行此操作。我將非常感謝這方面的提示。

這裏是什麼我的子集的一個看起來像一個例子:使用beside = TRUE

# To Create this example of data: 
b <- rep(matrix(c(1,2,3,2,1,3,1,1,1,1)), times=10) 
data <- matrix(b, ncol=10) 
colnames(data) <- paste("Var", 1:10, sep = "") 
data <- as.data.frame(data) 
reg_name <- c("North", "South") 
Region <- rep(reg_name, 5) 
data <- cbind(data,Region) 

,我能創造一個分組條形圖(按區域VAR1從數據分組):

tb <- table(data$Var1,data$Region) 
barplot(tb, main="Var1", xlab="Values", legend=rownames(tb), beside=TRUE, 
     col=c("green", "darkblue", "red")) 

我想循環這個過程以產生用於實施例10個重複對VAR1到Var10:

for(i in 1:10){ 
    tb <- table(data[i], data$Region) 
    barplot(tb, main = i, xlab = "Values", legend = rownames(tb), beside = TRUE, 
      col=c("green", "darkblue", "red")) 
    } 

[R喜歡apply家庭的功能,因此我試圖創建一個功能應用:

fct <- function(i) { 
     tb <- table(data[i], data$Region) 
     barplot(tb, main=i, xlab="Values", legend = rownames(tb), beside = TRUE, 
      col=c("green", "darkblue", "red")) 
     } 
sapply(data, fct) 

我曾嘗試其他方法,但我從來沒有成功。也許latticeggplot2將提供更簡單的方法來做到這一點。我剛剛開始在R,我會很樂意接受任何提示和建議。謝謝!

(我在Windows上運行,與最近Rv3.1.2「Pumpking頭盔」)

回答

2

既然你說:「我的目標是比較每個變量的地區差異」,我不知道你」已經選擇了最佳的繪圖策略。但是,是的,有可能做你在問什麼。

這裏的默認打印您與您的代碼獲得以上,以供參考:

enter image description here

如果你想與10個地塊爲每個變量的列表,你可以做以下(含ggplot)

many_plots <- 

    # for each column name in dat (except the last one)... 
    lapply(names(dat)[-ncol(dat)], function(x) { 

    this_dat <- dat[, c(x, 'Region')] 
    names(this_dat)[1] <- 'Var' 

    ggplot(this_dat, aes(x=Var, fill=factor(Var))) + 
     geom_bar(binwidth=1) + facet_grid(~Region) + 
     theme_classic() 
    }) 

示例輸出,用於many_plots[[1]]

enter image description here

如果你想在一個圖像中的所有情節,你可以這樣做(使用重塑和data.table)

library(data.table) 
library(reshape2) 
dat2 <- 
    data.table(melt(dat, id.var='Region'))[, .N, by=list(value, variable, Region)] 

ggplot(dat2, aes(y=N, x=value, fill=factor(value))) + 
    geom_bar(stat='identity') + facet_grid(variable~Region) + 
    theme_classic() 

enter image description here

...但是這不是一個很大的陰謀。

+0

謝謝Arvi的建議。我更喜歡「許多情節」選項,但是我忽略了變量的名稱或數量(VarX)。我嘗試過title = paste(名字[i])。 – 2014-11-04 22:30:10

+0

除了這個問題:看來我的地區有非常不同的數字。繪製等於每個值的區域百分比會更好。我正在嘗試使用'prop.table'... – 2014-11-04 22:35:56

+0

1)由於上面的代碼在var名稱上使用'lapply',所以您可以使用'ggtitle(x)'2)修改'this_dat'來顯示比例,然後使用'geom_bar(stat ='identity')進行繪圖' – arvi1000 2014-11-04 22:39:36