#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
, он работал нормально.