Rstudio Bland Altman 对颜色和形状进行分组

Rstudio Bland Altman grouped colours and shapes

我有一个平淡的 altman 图,包含 16 个测量值,分为 3 个组(切片),我想对其进行颜色编码并且可能具有不同的形状,但不知何故我无法让它工作:

df <- data.frame("Slice" = c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3),
                 "Segments" = c(1:16),
                 "mean" = c(6,5,2,4,8,9,6,3,5,6,5,8,5,4,6,4),
                 "dif" = c(1,3,2,1,2,3,2,1,2,2,2,1,3,2,1,2))

#creat limits of agreement
    LL = mean(df$dif)-1.96*(sd(df$dif))
    UL = mean(df$dif)+1.96*(sd(df$dif))

#create BA plot
BAplot <- ggplot(df, aes(x=mean,y=dif))+
  geom_jitter(alpha=1.0,size=18,shape="*", stroke = 1.5)+
  geom_hline(yintercept=mean(df$dif),color= "blue",size=2)+
  geom_text(aes(x = 12, y = mean(df$dif)+0.2, label = round(mean(df$dif), 1)), col = "blue", size = 7) +
  geom_hline(yintercept=0,linetype=3,size=2) +
  geom_hline(yintercept=c(UL,LL),color="black",linetype="dashed",size=2)+theme_bw()+
  geom_text(aes(x = 12, y = UL+0.2, label = round(UL,1)), col = "black", size = 7) +
  geom_text(aes(x = 12, y = LL+0.2, label = round(LL,1)), col = "black", size = 7) +
  scale_x_continuous("mean",limits = c(-2,12))+
  scale_y_continuous("diff", limits = c(-1, 5.5))

要按颜色对点进行编码并具有不同的形状,您必须将 Slice 列映射到 color and/or shape 美学内部 geom_jitter.由于 Slice 是一个数字,我首先将其转换为 factor。如果你想要特定的颜色或形状,你可以使用 scale_color_manualscale_shape_manual:

设置你想要的值
library(ggplot2)

ggplot(df, aes(x = mean, y = dif)) +
  geom_jitter(aes(color = factor(Slice), shape = factor(Slice)), alpha = 1.0, size = 2) +
  geom_hline(yintercept = mean(df$dif), color = "blue", size = 2) +
  geom_text(aes(x = 12, y = mean(dif) + 0.2, label = round(mean(dif), 1)), col = "blue", size = 7) +
  geom_hline(yintercept = 0, linetype = 3, size = 2) +
  geom_hline(yintercept = c(UL, LL), color = "black", linetype = "dashed", size = 2) +
  theme_bw() +
  geom_text(aes(x = 12, y = UL + 0.2, label = round(UL, 1)), col = "black", size = 7) +
  geom_text(aes(x = 12, y = LL + 0.2, label = round(LL, 1)), col = "black", size = 7) +
  scale_x_continuous("mean", limits = c(-2, 12)) +
  scale_y_continuous("diff", limits = c(-1, 5.5))