使用ifelse确定GGR PLOT中的点大小,直到添加图例为止

使用ifelse确定GGR PLOT中的点大小,直到添加图例为止,r,if-statement,ggplot2,R,If Statement,Ggplot2,我试图建立一个图,其中如果n==0,则点的大小小于n>0。在我添加图例之前,代码一直有效。以下是我的代码: ggplot(len.oo, aes(x = TCL, y = n, colour = worm, shape = worm)) + ylim(0, 20) + geom_point(size = ifelse(len.oo$n == 0, 2, 4)) + theme_bw() + xlab(expression(~italic("O. obscurus")~"TCL (mm)

我试图建立一个图,其中如果n==0,则点的大小小于n>0。在我添加图例之前,代码一直有效。以下是我的代码:

ggplot(len.oo, aes(x = TCL, y = n, colour = worm, shape = worm)) + ylim(0, 20) +
  geom_point(size = ifelse(len.oo$n == 0, 2, 4)) + 
  theme_bw() + xlab(expression(~italic("O. obscurus")~"TCL (mm)")) + ylab("Abundance") +
  theme(legend.title=element_blank(), legend.position="none")
这给了我:

一旦我添加了一个图例,它就会给我一个错误。带图例的代码:

ggplot(len.oo, aes(x = TCL, y = n, colour = worm, shape = worm)) + ylim(0, 20) +
  geom_point(size = ifelse(len.oo$n == 0, 2, 4)) + 
  theme_bw() + xlab(expression(~italic("O. obscurus")~"TCL (mm)")) + ylab("Abundance") +
  theme(legend.title=element_blank(), legend.position=c(0.2, 0.8)) + guides(size=FALSE)
给我一个错误:

错误:长度必须为1或与数据(3)相同: 大小

我还尝试了
position=“top”
等方法,将图例置于绘图之外,而不使用辅助线(
size=FALSE


我可以轻松制作没有图例的图形,然后制作没有大小差异的图例,并使用其他软件将图例复制并粘贴到图像上,但我想在R中完成所有这些。

问题在于:
geom_point(size=ifelse(len.oo$n==0,2,4))

我不能给你一个直接的解决方案,因为没有提供任何数据,但我建议在
len.oo
数据框中添加一个变量,这样这个变量(假设你称它为
size\n
)是2或4,如果
n
等于0,然后将
ggplot
层更改为
geom\u点(aes(size=size\n))

可以使用以下代码创建此新变量:

library(dplyr)
len.oo <- mutate(len.oo, size_n = ifelse(n == 0, 2, 4))
库(dplyr)

len.oo可能重复的可能重复的谢谢大家,我能够使用以下代码让它工作:ggplot(len.oo,aes(x=TCL,y=n,color=worm,shape=worm))+ylim(0,20)+geom_point(aes(size=n>0))+scale_size_手册(values=c(2,4))+theme_bw()+xlab(表达式(~italic(“O.obscurus”)~“TCL(mm)”)+ylab(“丰度”)+主题(legend.title=element_blank(),legend.position=c(0.2,0.8))+辅助线(size=FALSE)