【问题标题】:Using ifelse to determine point size in r ggplot, works until legend is added使用 ifelse 确定 r ggplot 中的点大小,直到添加图例
【发布时间】:2017-04-01 17:45:29
【问题描述】:

我正在尝试设置一个图表,其中如果 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 中完成这一切。

【问题讨论】:

标签: r if-statement ggplot2


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢大家,我能够使用以下代码让它工作:ggplot(len.oo, aes(x = TCL, y = n, color = worm, shape = worm)) + ylim(0, 20) + geom_point(aes(size = n > 0)) + scale_size_manual(values = c(2, 4)) + theme_bw() + xlab(表达式(~italic("O. obscurus")~ "TCL (mm)")) + ylab("Abundance") + 主题(legend.title=element_blank(), legend.position=c(0.2, 0.8)) + guides(size=FALSE)
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
相关资源
最近更新 更多