r - ggplot2 - 突出显示选定的点和奇怪的行为

19

我想要突出显示选定的点,但遇到了一些奇怪的行为。首先是一些虚拟数据:

a <- 1:50
b <- rnorm(50)
mydata <- data.frame(a=a,b=b)
ggplot(mydata,aes(x=a,y=b)) + geom_point()

这个工作是正确的。现在,为了突出一些重点,我添加了另一个geom_point层:

ggplot(mydata[20:40,],aes(x=a,y=b)) + 
    geom_point() + 
    geom_point(aes(x=a[c(10,12,13)],y=b[c(10,12,13)]),colour="red")
注意,我仅显示数据的有限范围([20:40])。现在出现了奇怪的行为:
ggplot(mydata[10:40,],aes(x=a,y=b)) + 
    geom_point() + 
    geom_point(aes(x=a[c(10,12,13)],y=b[c(10,12,13)]),colour="red")

从选定范围大小开始,我遇到了一个错误,大致翻译自德语:Error...:参数暗示行数不同。奇怪的是,这会随着所选范围的不同而有所变化。[23:40] 将起作用,[22:40] 将不起作用。


这个错误的英文是:

Error...: Arguments implying different number of rows

Error in data.frame(x = c(19L, 21L, 22L), y = c(0.28198, -0.6215,  : 
  arguments imply differing number of rows: 3, 31

1
希望你不介意,但我已经加上了英文错误。 - csgillespie
3个回答

43
如果你的数据在不同的层之间不同,那么你需要为每个层指定新的数据。你可以使用每个需要不同数据的geomdata=...参数来实现这一点。
set.seed(1)
mydata <- data.frame(a=1:50, b=rnorm(50))
ggplot(mydata,aes(x=a,y=b)) + 
  geom_point(colour="blue") +
  geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5)

在此输入图片描述


1
好的,数据实际上并没有不同,只是一个不同的子集。但这个解决方案至少是稳定的。它只能使用显式命名(data=...)工作。但对于那个奇怪的错误没有任何解释... - lambu0815
2
@lambu0815 事实上,它是不同的子集,这使得它与众不同。你遇到了奇怪的错误,因为你试图将单个美学(x)映射到三个不同的元素。美学必须映射到列名。你也不必明确命名 data=... 参数,但是你需要按正确的顺序提供参数,即 geom_point(aes(...), data, ...) - Andrie

8

另一种选择是在geom_point内同时添加颜色和大小的条件。然后我们分别使用scale_colour_manualscale_size_manual手动控制它们。

set.seed(1)
mydata <- data.frame(a = 1:50, b = rnorm(50))
ggplot(mydata) + 
  geom_point(aes(x = a, y = b, colour = a > 9 & a < 14, size = a > 9 & a < 14)) + 
  scale_colour_manual(values = c("blue", "red")) + 
  scale_size_manual(values =c(1, 4))+
  theme(legend.position = "none")

enter image description here


5

使用gghighlight的另一个解决方案:

a <- 1:50
b <- rnorm(50)
mydata <- data.frame(a=a,b=b, type = sample(letters, 50, replace = T))

library(gghighlight)
gghighlight_point(mydata, aes(x=a, y=b), label_key = type, 
                  a <= 14 & a >= 10 & b >= 0 , col="red")

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