如何在分面布局中让两个slab几何对象共享厚度刻度?
解决ggdist分面中后验与先验密度积分一致且y轴自由的问题
要实现同一分面内后验直方图和先验PDF的积分匹配,同时让不同分面的y轴刻度自由调整,关键是让厚度共享逻辑仅作用于单个分面内部,而非全局。以下是具体实现:
最终代码
samples %>% ggplot() + # 后验样本的密度直方图,指定group为parameter stat_slab(aes(x = value, group = parameter), density = "histogram") + # 先验PDF曲线,同样绑定group到parameter stat_slab(data = pdfs, aes(xdist = pdf, group = parameter), color = "black", fill = NA) + # 开启组内厚度共享,确保同一分面内的密度积分一致 scale_thickness_shared(renormalize = "groups") + facet_wrap(vars(parameter), scales = "free") + labs(x = "value", y = "density", title = "分面内积分一致,跨分面y轴自由缩放", subtitle = "基于group实现分面内的厚度归一化")
方案原理
group = parameter:把每个参数对应的分面作为独立的分组单元,让scale_thickness_shared()只在同一个分组(分面)内统一密度尺度,保证该面板里的后验直方图和先验PDF积分相同。renormalize = "groups":明确要求ggdist在每个分组内重新归一化密度,这样不同分组(分面)的密度尺度完全独立,y轴就能根据各自的密度范围自由调整。
这个方案完美匹配你用基础绘图实现的效果:同一面板内的直方图和PDF可以直接对比密度高低,不同面板的y轴刻度根据参数的分布范围自动适配。
内容的提问来源于stack exchange,提问作者ebuhle
相关产品推荐
相关产品推荐

