如何为brms模型conditional_effects生成的图表自定义颜色?
brms模型条件效应图的因子分组颜色设置
问题场景
我用brms拟合模型,X(变量名segment)是包含5个水平的因子变量,其中1、3、5属于同一条件,2、4属于另一条件;Y是实验测得的连续型因变量。使用conditional_effects()绘制X的估计效应图时,所有元素(均值点、标准差条)均为黑色。我尝试用以下代码设置分组颜色,但没有效果:
segmentEffect <- conditional_effects(model,effect = "segment") myPlot <- plot(segmentEffect,plot=FALSE)[[1]] + scale_fill_manual(values = c("1" = "cyan", "2" = "pink", "3" = "cyan", "4" = "pink", "5" = "cyan"))+ scale_colour_manual(values = c("1" = "cyan", "2" = "pink", "3" = "cyan", "4" = "pink", "5" = "cyan")) myPlot
解决方案
方法1:直接绑定因子水平与颜色映射
原来的代码失效是因为绘图对象没有将颜色/填充美学与segment变量绑定,需先通过aes()指定映射关系,再设置颜色:
segmentEffect <- conditional_effects(model, effect = "segment") myPlot <- plot(segmentEffect, plot=FALSE)[[1]] + # 将颜色、填充与segment变量绑定 aes(colour = segment, fill = segment) + scale_fill_manual(values = c("1" = "cyan", "2" = "pink", "3" = "cyan", "4" = "pink", "5" = "cyan")) + scale_colour_manual(values = c("1" = "cyan", "2" = "pink", "3" = "cyan", "4" = "pink", "5" = "cyan")) myPlot
方法2:创建分组变量简化设置(推荐)
如果需要复用分组逻辑,先给数据集添加分组变量,再基于分组设置颜色,更简洁清晰:
- 给原始数据集添加分组列:
# 假设数据集名为data,X变量为segment data$cond_group <- factor(ifelse(data$segment %in% c(1,3,5), "条件A", "条件B"))
- 绘图时绑定分组变量与颜色:
segmentEffect <- conditional_effects(model, effect = "segment") myPlot <- plot(segmentEffect, plot=FALSE)[[1]] + aes(colour = cond_group, fill = cond_group) + scale_fill_manual(values = c("条件A" = "cyan", "条件B" = "pink")) + scale_colour_manual(values = c("条件A" = "cyan", "条件B" = "pink")) myPlot
失效原因说明
conditional_effects()默认生成的ggplot对象中,点和误差线的颜色是固定值(默认黑色),并未将colour或fill美学与segment变量建立映射关系。因此直接添加颜色比例尺不会生效,必须先通过aes()指定变量与美学的绑定。
内容的提问来源于stack exchange,提问作者SimonBoy
相关产品推荐
相关产品推荐

