使用ifelse确定r ggplot中的点大小,直到添加了图例为止

时间:2017-04-01 17:45:29

标签: r if-statement ggplot2

我正在尝试设置一个图表,如果n == 0,则点的大小小于n>这段代码一直有效,直到我添加一个图例。这是我的代码:

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 without legend

只要我添加一个图例就会给我一个错误。带图例的代码:

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中完成所有这些。

1 个答案:

答案 0 :(得分:2)

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

我无法为您提供直接的解决方案,因为没有提供数据,但我建议您在len.oo数据框中添加一个变量,以便这个变量(假设您称之为size_n)如果n等于0,则为2或4,然后将ggplot图层更改为geom_point(aes(size = size_n))

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

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