使用scale_color_grey()进行错误的图例排序

时间:2017-09-12 01:37:33

标签: r ggplot2 colors legend legend-properties

我正在进行蒙特卡罗模拟,其中我必须在同一图上显示不同样本大小的模拟的系数估计密度。使用scale_color_grey时。我已将系数估计值放在同一数据帧中,样本大小为一个因子。如果我使用levels()查询因子,它的顺序是正确的(从最小到最大的样本大小)。但是,下面的代码给出了图例中顺序正确的比例,但颜色从看似随机的顺序从浅灰色变为深灰色

montecarlo <- function(N, nsims, nsamp){
  set.seed(8675309)
  coef.mc <- vector()
    for(i in 1:nsims){
      access <- rnorm(N, 0, 1) 
      health <- rnorm(N, 0, 1)
      doctorpop <- (access*1) + rnorm(N, 0, 1)
      sick <- (health*-0.4) + rnorm(N, 0, 1)
      insurance <- (access*1) + (health*1) + rnorm(N, 0, 1)
      healthcare <- (insurance*1) + (doctorpop*1) + (sick*1) + rnorm(N, 0, 1)
      data <- as.data.frame(cbind(healthcare, insurance, sick, doctorpop))
      sample.data <- data[sample(nrow(data), nsamp), ]
      model <- lm(data=sample.data, healthcare ~ insurance + sick + doctorpop)
      coef.mc[i] <- coef(model)["insurance"]
    }
  return(as.data.frame(cbind(coef.mc, nsamp)))
}

sample30.df <- montecarlo(N=1000, nsims=1000, nsamp=30)
sample100.df <- montecarlo(1000,1000,100)
sample200.df <- montecarlo(1000, 1000, 200)
sample500.df <- montecarlo(1000, 1000, 500)
sample1000.df <- montecarlo(1000, 1000, 1000)
montecarlo.df <- rbind(sample30.df, sample100.df, sample200.df, sample500.df, sample1000.df)
montecarlo.df$nsamp <- as.factor(montecarlo.df$nsamp)
levels(montecarlo.df$nsamp) <- c("30", "100", "200", "500", "1000")

##creating the plot
montecarlo.plot <- ggplot(data=montecarlo.df, aes(x=coef.mc, color=nsamp))+
  geom_line(data = subset(montecarlo.df, nsamp==30), stat="density")+
  geom_line(data = subset(montecarlo.df, nsamp==100), stat="density")+
  geom_line(data = subset(montecarlo.df, nsamp==200), stat="density")+
  geom_line(data = subset(montecarlo.df, nsamp==500), stat="density")+
  geom_line(data = subset(montecarlo.df, nsamp==1000), stat="density")+
  scale_color_grey(breaks=c("30", "100","200", "500", "1000"))+
  labs(x=NULL, y="Density of Coefficient Estimate: Insurance", color="Sample Size")+
  theme_bw()
montecarlo.plot 

不使用breaks scale_color_grey参数返回一个图例,其中阴影的顺序正确,但不会从最小到最大的样本量增加。

这里发生了什么?据我了解,ggplot2应该在分配颜色和创建图例时遵循因子的顺序(这是正确的)。如何使图例和灰色阴影从最小到最小的样本量增加?

1 个答案:

答案 0 :(得分:1)

您应该让ggplot处理为nsamp的每个级别绘制单独的行:因为您已将nsamp映射到颜色审美,ggplot将自动绘制不同的颜色每个级别的行,所以你可以这样做:

montecarlo.plot <- ggplot(data=montecarlo.df, aes(x=coef.mc, color=nsamp))+
    geom_line(stat = "density", size = 1.2) +
    scale_color_grey() +
    labs(x=NULL, y="Density of Coefficient Estimate: Insurance", color="Sample Size")+
    theme_bw()
montecarlo.plot

无需手动对数据进行子集化。