Разные цвета линий в выводе лесного участка из пакета sjPlot R.

#r #ggplot2 #lm #sjplot

#r #ggplot2 #lm #sjplot

Вопрос:

Я готовлю лесные участки с коэффициентами регрессии, используя sjPlot package. Как я могу настроить цвет линий коэффициентов регрессии, чтобы для каждого коэффициента был один цвет?

Я пытался использовать аргумент colors = c("blue", "red", "black") внутри plot_model function , но это не сработало. Я также пытался использовать разные палитры в сочетании с 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, но опять же, две фиолетовые линии и одна желтая линия. И он возвращает следующие сообщения:

«Масштаб для «заливки» уже присутствует. Добавление другого масштаба для «заливки «, который заменит существующий масштаб. » «Шкала для «цвета» уже присутствует. Добавление другой шкалы для «цвета «, которая заменит существующую шкалу. «

введите описание изображения здесь

Если я установлю colors = NULL в коде, он не должен возвращать эти сообщения, не так ли?

Я был бы признателен за любую помощь, чтобы получить один другой цвет для каждого предиктора. Примечание: этот участок будет объединен с другими участками с теми же предикторами. Поэтому я хочу, чтобы они имели одинаковый цвет на обоих участках, чтобы улучшить читаемость.

Ответ №1:

По умолчанию эстетика цвета / заливки сопоставляется с тем, является ли каждый коэффициент положительным или отрицательным. Чтобы переопределить это и указать 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 ), мы можем дополнительно указать order.terms в plot_model :

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

график

Комментарии:

1. Большое вам спасибо за ваш ответ @Z.Lin. Было приятно, что вы показали order.terms аргумент, потому что я попытался использовать group.terms в сочетании с sort.est = TRUE , и я получил ошибку : Error: fun must return a single number per group . Когда я заменил sort.est = TRUE на order.terms , он работал нормально.