ggplot出现‘Calling 'structure(NULL, *)' is deprecated’警告的原因排查
ggplot2 3.3.6.9000 中结构警告的原因与解决方法
使用ggplot2 3.3.6.9000版本生成图表时,控制台会输出大量虚假错误类警告,具体内容如下:
Warning message:
In structure(in_domain, pos = match(in_domain, breaks)) :
Calling 'structure(NULL, *)' is deprecated, as NULL cannot have attributes.
Consider 'structure(list(), *)' instead.
最小可复现示例(MRE)
library(ggplot2) facet <- rep(c("Sample 1","Sample 2","Sample 3","Sample 4","Sample 5"),20) num_data <- rnorm(100) data <- data.frame(cbind(facet,num_data)) data$num_data <- as.numeric(data$num_data) names(data) <- c("ID","Data") plot_data <- data leg_names <- c("Data"="red") p <- ggplot(plot_data,aes(x=Data))+ scale_color_manual(values=leg_names)+ scale_fill_manual(values=leg_names) p <- p+ geom_histogram(aes(fill="Data"))+ labs(y="Count") p
问题原因
这个警告的触发点在于:你加载了scale_color_manual配置,但整个图表并没有使用color美学映射(仅用到了fill)。ggplot2内部在处理未被使用的颜色比例尺时,会生成带属性的空值,而当前版本对structure(NULL, *)这种写法已经弃用,因此抛出警告。
解决方法
移除代码中未实际使用的scale_color_manual语句,仅保留和fill美学对应的比例尺配置即可消除所有此类警告。修改后的代码如下:
library(ggplot2) facet <- rep(c("Sample 1","Sample 2","Sample 3","Sample 4","Sample 5"),20) num_data <- rnorm(100) data <- data.frame(cbind(facet,num_data)) data$num_data <- as.numeric(data$num_data) names(data) <- c("ID","Data") plot_data <- data leg_names <- c("Data"="red") p <- ggplot(plot_data,aes(x=Data))+ scale_fill_manual(values=leg_names) p <- p+ geom_histogram(aes(fill="Data"))+ labs(y="Count") p
内容的提问来源于stack exchange,提问作者Steven Ouellette
相关产品推荐
相关产品推荐

