sjPlot R包的森林图中输出的不同线条颜色

Different line colors in forest plot output from sjPlot R package

我正在使用 sjPlot 包准备带有回归系数的森林图。如何自定义回归系数的线条颜色以使每个系数具有一种颜色?

我曾尝试在 plot_model function 中使用参数 colors = c("blue", "red", "black"),但没有成功。我也尝试过将不同的调色板与 scale_color_manual 结合使用,但它也没有用。

这是来自 sjPlot 包的示例:

library(sjPlot)
library(sjmisc)
data(efc)

#I used log before each predictor to have an example of confidence interval
fit <- lm(tot_sc_e ~ log(c161sex) + log(e17age) + log(c160age), data = efc)

plot_model(fit, colors = c("blue", "red", "black"))

它给了我一条有两条蓝线和一条红线的图。图中没有黑线!

尝试使用其他方法没有帮助:

plot_model(fit, colors = NULL)+
  scale_fill_sjplot(palette = "viridis", discrete = TRUE)+
  scale_color_viridis(discrete = TRUE)

它实际上使用了 viridis 调色板,但同样是两条紫色线和一条黄色线。它 return 包含以下消息:

"Scale for 'fill' is already present. Adding another scale for 'fill', which will replace the existing scale." "Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale."

如果我在代码中设置colors = NULL,它应该不会return这些消息,应该吗?

如果能为每个预测变量获得一种不同的颜色,我将不胜感激。 注意:该图将与具有相同预测变量的其他图组合。因此,我想让它们在两个图中都具有相同的颜色以提高可读性。

默认情况下,颜色/填充美学被映射到每个系数是正还是负。要覆盖它并告诉 sjPlot 将 3 个系数中的每一个都视为自己的组,您可以将 group.terms = c(1, 2, 3) 指定为 plot_model:

中的参数
plot_model(fit, 
           group.terms = c(1, 2, 3), 
           colors = c("blue", "red", "black"))

该函数的默认行为还按字母顺序对系数进行排序,这打乱了蓝-红-黑序列。为了保持系数的原始顺序(即fit中的顺序),我们可以在plot_model中额外指定order.terms

plot_model(fit, 
           group.terms = c(1, 2, 3), 
           order.terms = c(1, 2, 3),
           colors = c("blue", "red", "black"))