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

如何修改ggpredict绘图的X轴标签,还原原始年份显示?

问题:将ggpredict绘图的缩放年份轴标签还原为原始年份

建模时为控制截距误差,将连续变量「year」缩放为1→15(对应2008至2022年),希望把ggpredict生成的绘图X轴标签改回原始年份形式,但直接用scale_x_continuous指定原始年份作为breaks的方法无效,相关代码和效果如下:

初始绘图代码

library(ggeffects)

ggpredict(mod, c("CYR.std", "Season")) %>% plot(rawdata = TRUE, jitter = .01) + 
  labs(title = "Predicted counts of Gulf Toadfish")

初始绘图

无效的修改尝试代码

ggpredict(mod, c("CYR.std", "Season")) %>% plot(rawdata = TRUE, jitter = .01) + 
  labs(title = "Predicted counts of Gulf Toadfish", x = "Year", y = "Count") + 
  scale_x_continuous(breaks=c(2008, 2009, 2010, 2011, 
                              2012, 2013, 2014, 2015, 
                              2016, 2017, 2018, 2019,
                              2020, 2021, 2022), 
                     labels=c('2008', '2009', '2010', '2011', 
                            '2012', '2013', '2014', '2015', 
                            '2016', '2017', '2018', '2019',
                            '2020', '2021', '2022')) + 
  theme(axis.text.x=element_text(angle = 45, hjust = 0))

修改后绘图

问题复现代码

n <- 10

#regression coefficients
beta0 <- 1
beta1 <- 0.2

#generate covariate values(模拟缩放后的年份值,范围0-1.5对应实际1-15)
x <- runif(n=n, min=0, max=1.5)

#compute mu's
mu <- exp(beta0 + beta1 * x)

#generate Y-values
y <- rpois(n=n, lambda=mu)

#data set
data <- data.frame(y=y, x=x)

model <- glm(y ~ x, data = data, family = poisson)

# 无效的修改尝试
ggpredict(model, c("x")) %>% plot(rawdata = TRUE, jitter = .01) + 
  scale_x_continuous(breaks=c(2008, 2009, 2010), 
                     labels=c('2008', '2009', '2010'))

解决方案

核心原因

之前的方法失效是因为:ggpredict返回的预测数据中,X轴使用的是缩放后的值(1-15),而你指定的breaks是原始年份(2008+),这些值不在当前X轴的范围内,所以无法被正确渲染。

正确修改步骤

  1. 明确缩放映射关系:假设缩放规则是缩放后的值 = 原始年份 - 2007(即1对应2008,15对应2022)。
  2. 在scale_x_continuous中,breaks设为缩放后的值,labels设为对应的原始年份。

修改后的实际场景代码

library(ggeffects)

# 定义缩放值与原始年份的对应关系
scaled_values <- 1:15
original_years <- 2008:2022

ggpredict(mod, c("CYR.std", "Season")) %>% plot(rawdata = TRUE, jitter = .01) + 
  labs(title = "Predicted counts of Gulf Toadfish", x = "Year", y = "Count") + 
  scale_x_continuous(breaks = scaled_values, 
                     labels = as.character(original_years)) + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # hjust=1避免标签溢出

修改后的复现代码(模拟场景)

n <- 10

beta0 <- 1
beta1 <- 0.2

# 模拟缩放后的年份:1-15对应2008-2022
x <- sample(1:15, n, replace = TRUE)
mu <- exp(beta0 + beta1 * x)
y <- rpois(n=n, lambda=mu)
data <- data.frame(y=y, x=x)

model <- glm(y ~ x, data = data, family = poisson)

# 正确的轴标签修改
ggpredict(model, c("x")) %>% plot(rawdata = TRUE, jitter = .01) + 
  scale_x_continuous(breaks = 1:15, 
                     labels = as.character(2008:2022)) +
  labs(x = "Year")

效果说明

修改后,X轴会以缩放后的值为位置标记,显示对应的原始年份标签,同时原始数据点也会正确对应到相应的年份位置。


内容的提问来源于stack exchange,提问作者Nate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:05:16