更改 R 中 ggplot2 系数图中 select 行的颜色
Change colors of select lines in ggplot2 coefficient plot in R
我想根据 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)
产生以下情节:
在此图中,我想在绘制时将 "x" 变量更改为红色。有任何想法吗?谢谢。
我认为,你不能用 coefplot.lm
制作的情节来做到这一点。包 coefplot
使用 ggplot2
作为绘图系统,这本身很好,但不允许像你想的那样轻松地玩颜色。为了获得所需的颜色,您需要在数据集中有一个变量来对值进行颜色编码;您需要在使用 CE 绘制点的层内的 aes()
函数中指定 color = color-code
。显然,这对于 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()
作为默认值。输出是一个 ggplot2
对象。所以,你可能会改变很多。
我想根据 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)
产生以下情节:
在此图中,我想在绘制时将 "x" 变量更改为红色。有任何想法吗?谢谢。
我认为,你不能用 coefplot.lm
制作的情节来做到这一点。包 coefplot
使用 ggplot2
作为绘图系统,这本身很好,但不允许像你想的那样轻松地玩颜色。为了获得所需的颜色,您需要在数据集中有一个变量来对值进行颜色编码;您需要在使用 CE 绘制点的层内的 aes()
函数中指定 color = color-code
。显然,这对于 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()
作为默认值。输出是一个 ggplot2
对象。所以,你可能会改变很多。