更改R

时间:2015-09-29 14:10:00

标签: r plot ggplot2 coefplot

我想根据R中ggplot2系数图中点估计是负还是正来改变系数线的颜色。例如:

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

产生以下情节:

enter image description here

在此图中,我想在绘制时将“x”变量更改为红色。有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:3)

我认为,你不能用coefplot制作的情节做到这一点。包ggplot2使用color = color-code作为绘图系统,这本身很好,但不允许像您希望的那样轻松地使用颜色。要获得所需的颜色,您需要在数据集中使用一个变量来对值进行颜色编码;您需要在使用CE绘制点的图层中的aes()函数中指定coefplot.lm。显然,这与ggplot2函数的输出无关。也许,您可以使用ggplot_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()

哪个收益

enter image description here

请注意,我选择ggplot2作为默认值。输出是{{1}}对象。所以,你可能会改变很多。