我有两个变量(V1,V2),需要在简单的散点图中相互绘制。有些行缺少V1或V2,因此不会包括在绘图中,但这些行中仍然存在的信息仍然很重要。
因此,我尝试用数据范围之外的值替换NAs,并在轴上添加“NA”标签,但“breaks”和“labels”的要求必须具有相同的长度,这会导致出现额外的网格线。
是否可能在没有断点的情况下具有轴标签?非常感谢任何建议!
由于我是stackoverflow的新手,所以很抱歉无法发布图片来说明我的问题。希望下面的代码和链接足够了。
因此,我尝试用数据范围之外的值替换NAs,并在轴上添加“NA”标签,但“breaks”和“labels”的要求必须具有相同的长度,这会导致出现额外的网格线。
是否可能在没有断点的情况下具有轴标签?非常感谢任何建议!
由于我是stackoverflow的新手,所以很抱歉无法发布图片来说明我的问题。希望下面的代码和链接足够了。
# Simulated example data
library(ggplot2)
set.seed(112)
DF<-data.frame(V1=rnorm(20,10,4))
DF$V2<-DF$V1+rnorm(20,0,1)
DF[sample(1:dim(DF)[1],2),]$V1<-NA
DF[sample(1:dim(DF)[1],2),]$V2<-NA
# plot with NA rows removed
ggplot(DF,aes(x=V1,y=V2))+geom_point()+theme_bw()
# substitute NAs with value outside data range
DF$WasNA<-apply(DF,1,function(x)any(is.na(x)))
DF[is.na(DF$V1),]$V1<- -1
DF[is.na(DF$V2),]$V2<- -1
(p<-ggplot(DF,aes(x=V1,y=V2,colour=WasNA))+
geom_point()+
scale_colour_manual(values=c("black","grey70"))+
theme_bw())
p+
scale_x_continuous(breaks=c(-1,ggplot_build(p)$layout$panel_params[[1]]$x.major_source),labels=c("NA",ggplot_build(p)$layout$panel_params[[1]]$x.labels))+
scale_y_continuous(breaks=c(-1,ggplot_build(p)$layout$panel_params[[1]]$y.major_source),labels=c("NA",ggplot_build(p)$layout$panel_params[[1]]$y.labels))
(另外值得一提的是,我不确定为什么我添加的额外换行符也会在刻度的上端镜像出现?)
geom_vline
和geom_hline
在需要的位置创建网格线。另一个选项是使用naniar
包 中的geom_miss_point
更自动化地在绘图中包含缺失数据。还可以参考naniar
文献。 - eipi10