我想突出显示所选点并遇到一些奇怪的行为.首先是一些虚拟数据:
a <- 1:50
b <- rnorm(50)
mydata <- data.frame(a=a,b=b)
ggplot(mydata,aes(x=a,y=b)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
这工作正常.现在,为了突出一些要点,我添加了另一个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")
Run Code Online (Sandbox Code Playgroud)
请注意,我只显示有限范围的数据([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")
Run Code Online (Sandbox Code Playgroud)
更改所选范围的大小,我得到一个错误,大致翻译为德语:Error...: Arguments implying different number of rows.奇怪的是,这随所选范围而变化.[23:40]会工作,[22:40]不会.
英文错误是:
Error in data.frame(x = c(19L, 21L, 22L), y = c(0.28198, -0.6215, :
arguments imply differing number of rows: 3, 31
Run Code Online (Sandbox Code Playgroud)
And*_*rie 36
如果不同图层之间的数据不同,则需要为每个图层指定新数据.
您可以使用data=...每个geom需要不同数据的参数执行此操作:
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)
Run Code Online (Sandbox Code Playgroud)

另一种选择是在geom_point. 然后我们分别手动控制那些使用scale_colour_manual和 的人scale_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")
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32731 次 |
| 最近记录: |