在单独的图表ggplot2中绘制多个直方图系列

时间:2017-07-21 15:35:00

标签: r ggplot2 histogram

这是我的代码:

#set parameters
p <- 0.41
n <- 100
s <- 200

#generate data
y_1_list = c()
for (i in 1:s){
  for (j in 1:n){
    vars[j] <- rbinom(1, 1, p)
  }
  y_1_list[i] <- sum(vars) / n
}

y_2_list = c()
for (i in 1:s){
  for (j in 1:n){
    vars[j] <- rbinom(1, 1, p)
  }
  y_1 <- sum(vars) / n
  y_2_list[i] <- sum(y_1 - vars)^2 / n
}

y_3_list = c()
for (i in 1:s){
  for (j in 1:n){
    vars[j] <- rbinom(1, 1, p)
  }
  y_1 <- sum(vars) / n
  y_3_list[i] <- y_1 / n
}

y_4_list = c()
for (i in 1:s){
  for (j in 1:n){
    vars[j] <- rbinom(1, 1, p)
  }
  y_1 <- sum(vars) / n
  y_4_list[i] <- y_1 / sqrt(n)
}

#bind vectors into data frame
samples <- data.frame(y_1_list, y_2_list, y_3_list, y_4_list)

#ggplot histograms
ggplot(data = samples, aes(y_1_list)) + 
  geom_histogram()

我想在2x2网格上为这些系列中的每一个绘制四个单独的直方图:y_1_list,y_2_list,y_3_list,y_4_list。

我可以在网上找到的唯一资源是更复杂的图:a)从同一个变量中绘制数据,用其他变量分割b)绘制同一图表上的数据。

2 个答案:

答案 0 :(得分:1)

尝试重建数据框并在ggplot中使用facet_wrap

#bind vectors into data frame
samples <- data.frame(y = c(y_1_list, y_2_list, y_3_list, y_4_list), 
                      ylabel = rep(c("y1", "y2", "y3", "y4"), each = 200))

#ggplot histograms
ggplot(data = samples, aes(y)) + 
    geom_histogram() +
    facet_wrap(~ylabel, nrow = 2, scale = "free_x")

答案 1 :(得分:0)

除了以下答案,您还可以在ggplot中使用facet_grid()。使用facet_grid()或facet_wrap()更平滑,但如果你需要在同一个图中添加其他类型的图形或包含特定的图例,我也会使用:

#Load library "gridExtra"
library(gridExtra)

#Plot graphs in 2x2:
grid.arrange(
  ggplot(data = samples, aes(y_1_list))+geom_histogram(),
  ggplot(data = samples, aes(y_2_list))+geom_histogram(),
  ggplot(data = samples, aes(y_3_list))+geom_histogram(),
  ggplot(data = samples, aes(y_4_list))+geom_histogram(),
   ncol=2)