如何处理ggplot中完全丢失的数据?

问题描述

以下代码返回

错误:将离散值提供给连续刻度

由于miss列没有任何数据。这似乎暗示着其中一根轴是离散的(这是不正确的),因此不接受数值。

如何防止该轴离散?

library(ggplot2)

data <- data.frame(c(1,2,3),c(4,5,6),c(NA,NA,NA))
colnames(data) <- c("x","y","miss")


plot <- ggplot(data,aes(x = x,y = y)) +
  scale_x_continuous() + 
  scale_y_continuous() + 
  geom_ribbon(aes(ymin = y - 1,ymax = y + 1)) +
  geom_rect(aes(xmin = miss,xmax = miss,ymin = miss,ymax = miss))

print(plot)

解决方法

创建data$miss之类的向量并仅填充NA值时,类型默认为"logical"类。实际上,创建空向量时也是如此。

> class(vector())
[1] "logical"

如果逐行删除绘图代码,您会发现问题出在geom_rect()行,这很有意义:您正在要求将美学赋予逻辑值({{ 1}}),而不是数字值。

要解决此问题,只需让R知道data$miss是数字:

data$miss

这可以解决您的问题,并且绘图工作正常-您将仅收到以下警告消息,并且显然将无法看到rect geom:

data$miss <- as.numeric(data$miss)