【问题标题】:Create different colours for regression lines为回归线创建不同的颜色
【发布时间】:2013-11-22 23:25:12
【问题描述】:

我正在创建一个散点图(大约 1,500,000 个点),并根据一个因子变量通过它运行回归(见下文“半数”)。这是图片:

如您所见,很难看到“红色”回归线。

这是数据:

  For_Cov     Per_chg      halfs
  1  0.8372001 0.002400000 upper half
  2  0.7236001 0.002800111 upper half
  3  0.6036000 0.000800000 upper half
  4  0.8540000 0.000000000 upper half
  5  0.9080001 0.003200000 upper half
  6  0.8248000 0.000000000 upper half
  7  0.1132000 0.000000000 upper half
  8  0.2044000 0.007600000 upper half
  9  0.2476001 0.085200000 upper half
  10 0.2368000 0.003600000 upper half

这是代码:

 ggplot(grid_gdp_full, aes(x = For_Cov, y = Def_Chg, group = factor(halfs))) + 
    geom_point(aes(colour = halfs), alpha = 0.1) +
    stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 4, fullrange=TRUE,     aes(group = halfs, colour = halfs), alpha = 1) +
    xlab("Initial") +
    ylab("Percent") +
    ylim(0,0.10) +
    scale_x_reverse() +
    theme_bw() +theme(
    axis.text=element_text(size=12)
    ,axis.title=element_text(size=14,face="bold")
    ,plot.background = element_blank()
    ,panel.grid.major = element_blank()
    ,panel.grid.minor = element_blank()
    ,panel.border = element_blank()
    ,panel.background = element_blank()
     ) +
     theme(axis.line = element_line(color = 'black')) 

有人如何更改代码以使回归线具有不同的颜色(回归线由 stat_smooth 创建) - 两个因子水平可能为灰色和蓝色,而不改变点的初始颜色?

这是我目前正在使用的代码,但我仍然无法获得两条不同颜色的线:

 ggplot(grid_gdp_full, aes(x = For_Cov, y = Def_Chg, fill = factor(halfs))) + 
   geom_point(aes(colour = halfs), alpha = 0.1, colour="transparent",shape=21) +
   stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 2, fullrange=TRUE, aes(group = factor(halfs)), alpha = 1) +
   xlab("Initial") +
   ylab("Percent") +
   ylim(0,0.1) +
   scale_x_reverse() +
   theme_bw() +theme(
     axis.text=element_text(size=12)
     ,axis.title=element_text(size=14,face="bold")
     ,plot.background = element_blank()
     ,panel.grid.major = element_blank()
     ,panel.grid.minor = element_blank()
     ,panel.border = element_blank()
     ,panel.background = element_blank()
   ) +
   theme(axis.line = element_line(color = 'black')) +
   scale_colour_manual(values = c("red","blue")) + 
   scale_fill_manual(values = c("grey","green"))

dev.off()

【问题讨论】:

  • 您的表有 Per_Chg 列,但您的代码引用了 Def_Chg 列???
  • 感谢您的帮助,但我仍然没有得到正确的答案。我附上了更新后的代码!
  • 我在您的样本上进行了尝试(但需要将一些“上”更改为“下”,以便有 2 个因素),它奏效了。我将重现情节并将其添加到答案中。

标签: r colors ggplot2


【解决方案1】:

利用点形状 21,我们可以将 fill 用于点,colour 用于线。根据需要通过 scale_manual 设置颜色。请注意geom_point 中的colour=transparent,因此我们删除了点周围的颜色边框。

ggplot(mtcars, aes(x=cyl,y=mpg,fill=factor(gear))) +
            geom_point(aes(fill=factor(gear)),colour="transparent",shape=21) + 
            stat_smooth(aes(colour=factor(gear)),method="lm",se = FALSE) + 
            scale_colour_manual(values = c("red","blue", "green")) + 
            scale_fill_manual(values = c("orange","pink", "red"))

【讨论】:

  • 非常巧妙地使用了形状 21。
【解决方案2】:

好的。我现在看到了您想要的(我认为...):您希望线组的颜色与点组的颜色不同。本质上,您需要四种颜色:两种用于点组,两种用于线组。

这适用于您的样本,使用 For_Cov<0.5 重新编码为“更低”以拆分数据。

grid_gdp_full$halfs <- ifelse(grid_gdp_full$For_Cov<0.5,"lower half","upper half")
grid_gdp_full <- cbind(grid_gdp_full,col = 
                 ifelse(grid_gdp_full$halfs=="lower half","lm: lower","lm: upper"))

ggplot(grid_gdp_full, aes(x = For_Cov, y = Per_chg)) + 
  geom_point(aes(colour = factor(halfs)), alpha = 0.9, size=5) +
  stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 4, fullrange=TRUE,
              aes(group = col, colour = factor(col)), alpha = 1) +
  xlab("Initial") +
  ylab("Percent") +
  ylim(0,0.10) +
  scale_x_reverse() +
  theme_bw() +theme(
    axis.text=element_text(size=12)
    ,axis.title=element_text(size=14,face="bold")
    ,plot.background = element_blank()
    ,panel.grid.major = element_blank()
    ,panel.grid.minor = element_blank()
    ,panel.border = element_blank()
    ,panel.background = element_blank()
  ) +
  theme(axis.line = element_line(color = 'black')) 

产生这个:

我将点放大并设置alpha=0.9,以便您可以看到这个小样本中的点。您还颠倒了 x 轴,这使得“下”和“上”有点混乱。

【讨论】:

  • 我在示例数据上进行了尝试,并在编辑中注明了修改。
猜你喜欢
  • 2018-05-04
  • 2019-02-20
  • 2013-10-08
  • 2012-05-01
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
相关资源
最近更新 更多