【问题标题】:Regression lines in ggplotggplot中的回归线
【发布时间】:2020-03-11 21:26:26
【问题描述】:

我有一个 2 x 2 的结果图,图中显示了 4 条回归线和 4 个不同颜色的组。我希望在图中保留 4 种颜色,但仅显示其中一个变量的 2 条 行 - 并非所有 4 条,如图所示。数据在这里-

PLD.df <- structure(list(Site = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Inshore", "OffReef"
), class = "factor"), Depth = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("Deep", "Shallow"
), class = "factor"), PLD = c(37L, 38L, 47L, 51L, 51L, 53L, 34L, 
39L, 40L, 45L, 49L, 49L, 26L, 29L, 35L, 35L, 36L, 36L, 37L, 38L, 
38L, 40L, 41L, 46L, 47L, 52L, 37L, 38L, 40L, 45L, 45L), Location = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L), .Label = c("ID", 
"IS", "OD", "OS"), class = "factor"), b = c(0.052, 0.05, 0.039, 
0.043, 0.036, 0.033, 0.055, 0.051, 0.048, 0.046, 0.041, 0.04, 
0.05, 0.05, 0.051, 0.049, 0.056, 0.052, 0.047, 0.045, 0.047, 
0.045, 0.045, 0.045, 0.039, 0.038, 0.046, 0.049, 0.046, 0.044, 
0.041)), .Names = c("Site", "Depth", "PLD", "Location", "b"), class = "data.frame", row.names = c(NA, 
-31L))

剧情如下-

ANCOVA 图:

我用来创建它的代码在这里-

ggplot(PLD.df, aes(x=PLD, y=b, colour=Location)) + 
  geom_point(aes(shape=Location),size=3) + 
  scale_shape(solid=FALSE) + 
  scale_colour_manual(values=cb_palette) + 
  geom_smooth(aes(linetype=Location),method=lm, se=FALSE, fullrange=F) + 
  theme(panel.border=element_rect(colour="black", fill=NA,size=3),
        panel.background=element_rect(fill=FALSE),
        panel.grid.major=element_blank(),
        panel.grid.minor=element_blank()) + 
  theme(legend.position="NONE")

最简单的方法是将线条全部删除,然后使用predictvals() 函数重新绘制所需的线条吗?我只想显示“近海”和“Offfreef”位置的回归线,同时保留所有 4 个站点的颜色。

注意:这是我在这里的第一个问题,如果我的问题格式不正确或我没有包含所有必要的信息,我们深表歉意。谢谢!

【问题讨论】:

  • 使用geom_smooth(aes(linetype=Location), data = subset(PLD.df, Location %in% c('Location1', 'Location2')), method=lm, se=FALSE, fullrange=F)。将 'Location1''Location2' 替换为您要为其绘制线条的实际位置。如果没有最小的可重复示例,我无法给出更完整的答案。
  • 请查看How to make a great R reproducible example,以修改您的问题,并从您的数据中提取较小的样本(查看?dput())。发布您的数据或没有数据的图像会使我们难以为您提供帮助!
  • 感谢您的反馈。我将阅读示例并添加一些数据。干杯

标签: ancova regression r ggplot2 regression data-visualization ancova


【解决方案1】:

如果我理解正确,您只需在 ggplot(aes(..)) 调用中指定 x 和 y,然后在 geom_smooth 中,根据站点(而不是位置?)进行分组。这将为您提供站点内的预测:

cb_palette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", 
               "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

ggplot(PLD.df, aes(x=PLD, y=b)) + 
  geom_point(aes(shape=Location,colour=Location),size=3) + 
  scale_shape(solid=FALSE) + 
  scale_colour_manual(values=cb_palette) + 
  geom_smooth(aes(linetype=Site),
              method=lm, se=FALSE, fullrange=F,col="gray") + 
  theme(panel.border=element_rect(colour="black", fill=NA,size=3),
        panel.background=element_rect(fill=FALSE),
        panel.grid.major=element_blank(),
        panel.grid.minor=element_blank()) + 
  theme(legend.position="NONE")

【讨论】:

  • 不客气@DanielMcNaughtan.. 尽量不要在答案中发表谢谢,他们可能会被删除:)
猜你喜欢
  • 2014-11-03
  • 1970-01-01
  • 2020-05-17
  • 2013-03-16
  • 2019-10-20
  • 2018-08-28
  • 2017-01-21
  • 2022-01-07
相关资源
最近更新 更多