如果有时该子集有意为空,如何在ggplot中添加第二个geom_point?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果有时该子集有意为空,如何在ggplot中添加第二个geom_point?相关的知识,希望对你有一定的参考价值。
我有这个代码非常好用。基本上它所做的是通过该州的所有州和商会来制作每个州的情节:
lapply(unique(finaldat$st), function(s){
chambs <- unique(finaldat$chamber[finaldat$st == s])
p <- list(NULL)
for(c in 1:length(chambs)){
p[[c]] <- finaldat %>% filter(st == s & chamber == chambs[c]) %>%
ggplot(aes(x = average, y = score, col = color))+
geom_point(aes(size= Total,alpha = 0.5)) +
stat_smooth(method = "lm") +
geom_point(data=subset(finaldat,st==s & chamber == chambs[c] & highlight>0),aes(col="yellow")) +
ggtitle(paste(s,chambs[c],year)) +
scale_size(range = c(.5,3.5)) +
scale_color_manual(labels = c("1","2","3"),
values = c("blue","red","yellow"))
filename = filename <- paste(s,chambs[c],year)
ggsave(paste("Plots/",filename,".png"), width = 10, height = 7)
}
return(p)
})
适用于前几个州,但我遇到第二个geom_point
线的问题,这基本上是一种突出黄色某些人的方法:
... + geom_point(data=subset(finaldat,st==s & chamber == chambs[c] & highlight>0),aes(col="yellow")) + ...
因为它是数据帧的一个子集,所以这个数据有一定的迭代,这个子集会产生一个空数据帧,因为有时没有人故意在highlight
变量中有一个高于零的值 - 因此我得到一个错误并且它会停止循环。但是我想找出一种方法,如果由于该子集为空而得到错误,它只会忽略那一行。但我无法弄清楚任何好的ifelse
陈述或任何事情来实现这一点。
以下是数据的示例:
st chamber average score color Total highlight
AK Upper .64 54 1 849 1
AK Upper .84 91 1 743 0
AK Upper .35 14 2 442 0
AK Upper .95 54 1 641 4
AK Lower .64 54 1 849 0
AK Lower .84 91 1 743 0
AK Lower .35 14 2 442 0
AK Lower .95 54 1 641 0
等等遍及所有州/商会 - 但在这个例子中,重点将适用于AK Upper但不适用于AK Lower。所以基本上当循环到达AK Lower时我只需要它忽略第二个geom_point
,因为空子集会导致它出错。有任何想法吗?
答案
lapply(unique(finaldat$st), function(s){
chambs <- unique(finaldat$chamber[finaldat$st == s])
p <- list(NULL)
for(c in 1:length(chambs)){
p[[c]] <- finaldat %>% filter(st == s & chamber == chambs[c]) %>%
ggplot(aes(x = average, y = score, col = color))+
geom_point(aes(size= Total,alpha = 0.5)) +
stat_smooth(method = "lm") -> gg
if (YOUR TEST HERE) {
gg <- gg + geom_point(data=subset(finaldat,st==s & chamber == chambs[c] & highlight>0),aes(col="yellow")) +
}
gg +
ggtitle(paste(s,chambs[c],year)) +
scale_size(range = c(.5,3.5)) +
scale_color_manual(labels = c("1","2","3"),
values = c("blue","red","yellow"))
filename = filename <- paste(s,chambs[c],year)
ggsave(paste("Plots/",filename,".png"), width = 10, height = 7)
}
return(p)
})
以上是关于如果有时该子集有意为空,如何在ggplot中添加第二个geom_point?的主要内容,如果未能解决你的问题,请参考以下文章