You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:35:33