ggplot2的abline和stat_smooth图例

5

我在使用ggplot图例时遇到了一些问题,以下是我的第一段代码,只涉及到corrGenes的图例,这部分代码没有问题。

gene1=c(1.041,0.699,0.602,0.602,2.585,0.602,1.000,0.602,1.230,1.176,0.699,0.477,1.322)
    BIME = c(0.477,0.477,0.301,0.477,2.398,0.301,0.602,0.301,0.602,0.699,0.602,0.477,1.176)
    corrGenes=c(0.922,0.982,0.934,0.917,0.993,0.697,0.000,0.440,0.859,0.788,0.912,0.687,0.894)

DF=data.frame(gene1,BIME,corrGenes)

plot= ggplot(data=DF,aes(x=gene1,y=BIME))+
  geom_point(aes(colour=corrGenes),size=5)+
  ylab("BIME normalized counts (log10(RPKM))")+
  xlab("gene1 normalized counts (log10(RPKM))")

当我添加abline和smooth时,我会得到正确的图表:
plot= ggplot(data=DF,aes(x=gene1,y=BIME))+
  geom_point(aes(colour=corrGenes),size=5)+
  geom_abline(intercept=0, slope=1)+
  stat_smooth(method = "lm",se=FALSE)+
  ylab("BIME normalized counts (log10(RPKM))")+
  xlab("gene1 normalized counts (log10(RPKM))")

但是没有办法获取它们的传说,我尝试了许多其他组合:

plot= ggplot(data=DF,aes(x=gene1,y=BIME))+
  geom_point(aes(colour=corrGenes),size=5)+
  geom_abline(aes(colour="best"),intercept=0, slope=1)+
  stat_smooth(aes(colour="data"),method = "lm",se=FALSE)+
  scale_colour_manual(name="Fit", values=c("data"="blue", "best"="black"))+
  ylab("BIME normalized counts (log10(RPKM))")+
  xlab("gene1 normalized counts (log10(RPKM))")

如果有人有解决这个微小但非常烦人的问题的想法,那将非常有帮助!
3个回答

3

最终,我找到了另一种使用技巧的方法。首先,我计算了线性回归并将结果转换为数据框,然后添加了我的最佳匹配(截距=0和斜率=1),然后我添加了一个数据类型的列(数据或最佳匹配)。

modele = lm(BIME ~ gene1, data=DF)
coefs = data.frame(intercept=coef(modele)[1],slope=coef(modele)[2])
coefs= rbind(coefs,list(0,1))
regression=as.factor(c('data','best'))
coefs=cbind(coefs,regression)

接着,我使用了独特的geom_abline命令将其绘制出来,并将DF从ggplot()移动到geom_point(),并使用linetype参数来区分这两条线:

plot = ggplot()+
  geom_point(data=pointSameStrandDF,aes(x=gene1,y=BIME,colour=corrGenes),size=5)+
  geom_abline(data=coefs, aes(intercept=intercept,slope=slope,linetype=regression), show_guide=TRUE)+
  ylab("BIME normalized counts (log10(RPKM))")+
  xlab("gene1 normalized counts (log10(RPKM))")

也许有一种方法可以为这2行使用颜色,但我找不到如何做?

感谢你们的帮助!


2
show_guide=TRUE参数应该显示geom_ablinestat_smooth的图例。尝试运行以下代码。
plot= ggplot(data=DF,aes(x=gene1,y=BIME))+
geom_point(aes(colour=corrGenes),size=5)+
geom_abline(aes(colour="best"),intercept=0, slope=1, show_guide=TRUE)+
stat_smooth(aes(colour="data"),method = "lm",se=FALSE, show_guide=TRUE)+
scale_colour_manual(name="Fit", values=c("data"="blue", "best"="black"))+
ylab("BIME normalized counts (log10(RPKM))")+
xlab("gene1 normalized counts (log10(RPKM))")

谢谢您的回答,我已经尝试过了,但是我仍然遇到了相同的错误:Error: Continuous value supplied to discrete scale - Mesmer
如果您删除scale_colour_manual行,问题是否得到解决? - figurine
@Mesmer Error: Continuous value supplied to discrete scale 大多数情况下意味着 R 将你提供的字符型 x 值读取为连续值。尝试使用 x <- as.factor(x) 然后进行绘图。 - gented

2

我不确定这是否是最佳解决方案,但我成功地告诉了ggplot有两个刻度,一个用于颜色(您的点),另一个用于填充颜色。你可能会问,填充颜色是哪个?我在两条线的aes中添加的那个。

plot = ggplot(data=DF,aes(x=gene1,y=BIME)) + 
  geom_point(size=5, aes(colour=corrGenes)) +
  geom_abline(aes(fill="black"),intercept=0, slope=1) + 
  stat_smooth(aes(fill="blue"), method = "lm",se=FALSE) +
  scale_fill_manual(name='My Lines', values=c("black", "blue"))+
  ylab("BIME normalized counts (log10(RPKM))")+
  xlab("gene1 normalized counts (log10(RPKM))")

enter image description here


谢谢Mucio,这个版本好多了,但还有一个小问题我不明白,为什么颜色图例是蓝色而不是黑色和蓝色,因为你指定了geom_abline(aes(fill="black"),intercept=0, slope=1)stat_smooth(aes(fill="blue"), method = "lm",se=FALSE)并将其链接到scale_fill_manual(name='My Lines', values=c("black", "blue")) - Mesmer

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