如何在metafor的regplot中按city变量修改气泡颜色?
问题
我已使用R语言的metafor包完成元回归分析,代码如下:
res.quad <- rma(mix.minor.1.1_estimates, sei = mix.minor.1.1_errors, mods = ~ poly(minperc, degree=2, raw=TRUE), data=meta2) res.quad
随后绘制了气泡图,代码如下:
xs <- seq(0, 1, length=10) sav <- predict(res.quad, newmods=unname(poly(xs, degree=2, raw=TRUE))) regplot(res.quad, mod=2, pred=sav, xvals=xs, xlab="Proportion of ethnic minority in class", ylab="Ethnic minority homophily")
我希望根据meta2数据框中未用于元回归的city变量修改气泡颜色,请问是否有可行的实现方法?
附meta2数据框代码:
meta2 <- data.frame(mix.minor.1.1_estimates = c(1, -1, 2, 2.3, 4.2, 0, -3.5), mix.minor.1.1_errors = c(0.1, 0.5, 0.3, 0.3, 0.2, 0.1, 0.5), city = c("n", "s", "n", "s", "n", "s", "n"), minperc = c(0.8, 0.9, 0.1, 0.6, 0.3, 0.2, 0.5))
解决方法
metafor包的regplot()函数支持通过col参数指定单个数据点的颜色,你可以直接基于meta2$city变量生成颜色向量来实现分组着色,以下是两种可行方案:
方案一:手动指定颜色映射
直接为不同城市类别分配自定义颜色:
# 根据city变量生成颜色向量 color_vec <- ifelse(meta2$city == "n", "#1f77b4", "#ff7f0e") # 蓝色对应"n",橙色对应"s" # 绘制带颜色区分的气泡图 xs <- seq(0, 1, length=10) sav <- predict(res.quad, newmods=unname(poly(xs, degree=2, raw=TRUE))) regplot(res.quad, mod=2, pred=sav, xvals=xs, xlab="班级中少数族裔比例", ylab="少数族裔同质性", col=color_vec, pch=19) # pch=19设置实心气泡样式 # 添加图例说明颜色对应关系 legend("topright", legend=c("n", "s"), col=c("#1f77b4", "#ff7f0e"), pch=19, title="城市分组")
方案二:自动分配分类颜色
若无需自定义颜色,可将city转为因子,使用R默认的分类配色:
# 将city转换为因子类型 meta2$city <- factor(meta2$city) # 自动生成对应因子水平的颜色 color_vec <- scales::hue_pal()(nlevels(meta2$city))[meta2$city] # 绘图 xs <- seq(0, 1, length=10) sav <- predict(res.quad, newmods=unname(poly(xs, degree=2, raw=TRUE))) regplot(res.quad, mod=2, pred=sav, xvals=xs, xlab="班级中少数族裔比例", ylab="少数族裔同质性", col=color_vec, pch=19) # 添加图例 legend("topright", legend=levels(meta2$city), col=scales::hue_pal()(nlevels(meta2$city)), pch=19, title="城市分组")
核心逻辑:regplot()的col参数接受长度与数据点数量一致的向量,每个元素对应一个气泡的颜色。通过city变量的取值映射颜色,就能实现按城市区分气泡的效果,配合图例可让图表更清晰。
内容的提问来源于stack exchange,提问作者Polina Ermolaeva
相关产品推荐
相关产品推荐

