ggplot中geom_abline未显示求助:Lexis Plot添加对角线失败
问题解决:Lexis Plot中geom_abline对角线未显示的原因及修复
你的对角线未显示是因为geom_abline的intercept参数设置错误,当前取值范围seq(-80,80, by=10)对应的直线完全不在绘图坐标范围内(x轴1900-2020,y轴0-80)。
核心逻辑
Lexis图中,连接10年间隔横竖线方格左下角与右上角的对角线,直线方程为y = x + (y0 - x0):
x0是横轴10年间隔的起始值(1900,1910,...2020)y0是纵轴10岁间隔的起始值(0,10,...80)- 对应的截距
intercept = y0 - x0
修复后的代码
将geom_abline的intercept参数替换为正确取值范围:
df <- data.frame(age = as.numeric(), year = as.numeric(), value = as.numeric()) for(x in c(1900:2020)){ temp <- data.frame(age = c(0:80), year = x, value = sample(0:20, 81, TRUE)) df <- rbind(df, temp) } # 生成所有需要的截距:y0 - x0,x0是10年间隔的年份,y0是10岁间隔的年龄 intercepts <- expand.grid(x0 = seq(1900, 2020, 10), y0 = seq(0, 80, 10)) |> dplyr::mutate(intercept = y0 - x0) |> dplyr::pull(intercept) myplot <- ggplot(df, aes(x=year, y=age, fill=value)) + geom_tile() + scale_fill_viridis(labels = scales::label_comma(), direction = -1) + geom_hline(yintercept=seq(0, 80, by=10), size = 0.5) + geom_vline(xintercept=seq(1900,2030, by=10), size = 0.5) + geom_abline(intercept=intercepts, slope = 1, size = 0.5, color = "white") + # 添加颜色让对角线更明显 xlab("Year") + ylab("Age") + coord_fixed() + theme(plot.subtitle = element_text(size = 10, face = "italic")) myplot
补充说明
- 如果只需要同出生队列的对角线(即间隔10年的出生队列线,比如1820、1830...2020年出生的群体),可简化截距计算:
intercept = -seq(1820, 2020, 10),生成的线会贯穿对应队列的整个区间。
内容的提问来源于stack exchange,提问作者tchoup
相关产品推荐
相关产品推荐

