如何在R中制作具有两个分类变量的散点图?其中x轴为类别变量。

4
我正在尝试使用R制作一个散点图,其中x轴有两个分类变量。对于箱线图,我知道如何做到这一点(请参见下面代码的第一部分),但是不知道为什么无法为散点图实现相同的效果。我尝试了几种方法,但当我绘制点时,它们总是重叠在一起,并且不再显示我的第二个分类变量。随机抖动也不起作用,因为我想让我的类别聚集在一起,而不是随机分散。有人知道怎么做吗?您可以在下面找到一些示例数据和一些我尝试过的图表,包括注释。第一个图表给了我一个类似于所需效果的东西,但是使用箱线图而不是散点图。第二个图表提供了散点图(为第二个分类变量人工创建数字),但是我失去了我的第二个分类变量的标签,并且将两个时间都绘制在一个空间中。
更复杂的是,我还想显示所有散点图的平均值线。类似于R中使用ggplot2制作分类散点图带均值线段的内容。我该如何添加?
感谢您的帮助!
time = c(rep('t1',12),rep('t2',12))
Origin =  c(rep('I1B',4),rep('I1C',4),rep('J4A',4),rep('I1B',4),rep('I1C',4),rep('J4A',4))
LB_FR = runif(24)

df = data.frame(time,Origin,LB_FR)

#does not work with geom_point
ggplot(df, aes(x = time, y = LB_FR, fill = Origin)) + geom_boxplot() + ggtitle('LB_FR')

#create df_2 with numbers instead of categories for Origin
df_2 = df
for (r in 1:nrow(df)){
  if (df$Origin[r] == 'I1B') df_2[r,'OriginNr'] = 1
  if (df$Origin[r] == 'I1C') df_2[r,'OriginNr'] = 2
  if (df$Origin[r] == 'J4A') df_2[r,'OriginNr'] = 3
}

# indices for time
t1 = df_2$time=="t1"
t2 = df_2$time=="t2"

plot(df_2$OriginNr,df$LB_FR, 
     xlim = c(0,4), ylim = c(0,1), bty = 'n',
     main = 'LB_FR', ylab = 'Fraction remaining', xlab = 'Origin', type = 'n')
points(df_2$OriginNr[t1],df_2$LB_FR[t1],col='red')
points(df_2$OriginNr[t2],df_2$LB_FR[t2],col='blue')
legend(0.1,0.9,legend=c('month 0-6','month 6-12'),pch=1,col=c('red','blue'),bty='n',cex=1.2)
1个回答

8

geom_boxplot的默认“position”是一个闪避位置。您也可以使用geom_point来模拟它:

ggplot(df, aes(x = time, y = LB_FR, color = Origin)) + 
    geom_point(position = position_dodge(width = 0.4))

enter image description here

我建议您保持问题的聚焦性:与其“让问题变得更加复杂”,不如针对平均线的事情提出一个新问题。

非常感谢你,Gregor!这正是我想要的。如果我无法让它工作,我将单独提出第二个问题,我会再尝试一下。 - Ciska

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接