我试图在R中制作一个散点图,在x轴上有两个分类变量。对于一个箱形图,我知道如何做到这一点(参见下面的代码的第一部分),但不知怎的,我不能让它为散点图工作。我尝试了几件事,但是当我绘制点时,它们总是重叠并且不再显示我的第二个分类变量。抖动不起作用,因为我希望我的类别聚类而不是随机扩散它们。有谁知道如何做到这一点?您可以在下面找到我尝试的一些示例数据和一些图表,包括评论。第一个图给了我类似于我想要的东西,但后来用boxplot而不是scatterplot。第二个图给出了散点图(人工创建第二个分类变量的数字),但随后我松开了第二个分类变量的标签,并在两个空间中绘制了两次。
为了使它更复杂,我还希望在所有散点图中显示平均值的线。类似于Categorical scatter plot with mean segments using ggplot2 in R中所做的事情。我该如何添加?
感谢您的帮助!
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)