Изменить цвета выбранных линий на графике коэффициента ggplot2 в R

Я хотел бы изменить цвет линий коэффициентов в зависимости от того, является ли точечная оценка отрицательной или положительной на графике коэффициента ggplot2 в R. Например:

require(coefplot)
set.seed(123)
dat <- data.frame(x = rnorm(100), z = rnorm(100))
mod1 <- lm(y1 ~ x + z, data = dat)
coefplot.lm(mod1)   

Который производит следующий сюжет:

На этом графике я бы хотел изменить переменную "x" на красный при построении графика. Есть идеи? Благодарю.

1 ответ

Решение

Я думаю, вы не можете сделать это с сюжетом, созданным coefplot.lm, Посылка coefplot использования ggplot2 как система построения графиков, которая сама по себе хороша, но не позволяет играть с цветами так легко, как хотелось бы. Для достижения желаемых цветов в вашем наборе данных должна быть переменная, которая будет кодировать значения цветом; вам нужно указать color = color-code в aes() функция внутри слоя, который рисует точки с CE. По-видимому, это невозможно сделать с выводом coefplot.lm функция. Может быть, вы можете изменить цвета, используя ggplot2ggplot_build() функция. Я бы сказал, что для этой задачи проще написать собственную функцию.


Я сделал это один раз, чтобы построить шансы. Если хотите, можете использовать мой код. Не стесняйтесь изменить это. Идея такая же, как в coefplot, Сначала мы извлекаем коэффициенты из модельного объекта и подготавливаем набор данных для построения графика; во-вторых, собственно сюжет.


Код для извлечения коэффициентов и подготовки набора данных

df_plot_odds <- function(x){
tmp<-data.frame(cbind(exp(coef(x)), exp(confint.default(x))))
odds<-tmp[-1,]
names(odds)<-c('OR', 'lower', 'upper')
odds$vars<-row.names(odds)
odds$col<-odds$OR>1
odds$col[odds$col==TRUE] <-'blue'
odds$col[odds$col==FALSE] <-'red'
odds$pvalue <- summary(x)$coef[-1, "Pr(>|t|)"]
return(odds)
}

Построить вывод функции извлечения

plot_odds <- function(df_plot_odds, xlab="Odds Ratio", ylab="", asp=1){
    require(ggplot2)
    p <- ggplot(df_plot_odds, aes(x=vars, y=OR, ymin=lower, ymax=upper),asp=asp) + 
        geom_errorbar(aes(color=col),width=0.1) + 
        geom_point(aes(color=col),size=3)+
        geom_hline(yintercept = 1, linetype=2) +
        scale_color_manual('Effect', labels=c('Positive','Negative'),
                          values=c('blue','red'))+   
        coord_flip() +
        theme_bw() +
        theme(legend.position="none",aspect.ratio = asp)+
        ylab(xlab) +
        xlab(ylab) #switch because of the coord_flip() above
    return(p)
}

Составление вашего примера

set.seed(123)
dat <- data.frame(x = rnorm(100),y = rnorm(100), z = rnorm(100))
mod1 <- lm(y ~ x + z, data = dat)
df <- df_plot_odds(mod1)
plot <- plot_odds(df)
plot

Который дает

Обратите внимание, что я выбрал theme_wb() по умолчанию. Выход является ggplot2объект. Таким образом, вы можете изменить это довольно много.

Другие вопросы по тегам