将小提琴图与森林图对齐

Posted

技术标签:

【中文标题】将小提琴图与森林图对齐【英文标题】:Aligning a violin plot with a forest plot 【发布时间】:2021-05-01 23:22:45 【问题描述】:

小提琴图 (b) 似乎与森林图 (a) 不太吻合。虽然第 5 列似乎对齐得很好,但所有其他列都没有。

我尝试了plot_gridggarangegrid_draw 函数,但它们似乎无法修复对齐问题。

我的结果:

我的代码:

library(ggplot2)
library(cowplot)

#plots

a <- ggplot(data=dat_1, aes(x=varno, y=-coef, ymin=-LCI, ymax=-UCI))+ 
  geom_errorbar(width=0,size = 2,color="steelblue")+
  geom_point(size=5, color="steelblue")+
  geom_hline(yintercept=0, color="black", linetype="dashed", alpha=.5)+  #add x=0 line
  scale_y_continuous(name = "r")+
  scale_x_continuous()+
  ggtitle("A)")+
  theme_minimal()+ 
  theme(axis.text.x = element_blank(),
        axis.title.x = element_blank())

b <- ggplot(dat_2, aes(y=score, x=as.factor(group), fill=as.factor(time)))+ 
  geom_violin(position=position_dodge(0.5), trim=T)+
  scale_x_discrete()+
  labs(fill = "time",y="ratings")+
  ggtitle("B)")+
  theme_minimal()+ 
  theme(axis.text.x = element_text(angle = 90),
        axis.title.x = element_blank(),
        legend.position = "bottom")

plot_grid(a, b, align = "v", ncol = 1 )

我的数据:

#data
coef<-c(7.780000e-01, -2.350000e-01, -2.820000e-01, -3.090000e-01, 7.560000e-01, -0.0210000, -2.000000e-01, -0.1790000000, -2.690000e-01, -0.10300000)
LCI<-c(7.240000e-01, -3.670000e-01, -3.940000e-01, -4.310000e-01, 6.950000e-01, -0.1720000, -3.510000e-01, -0.3050000000, -4.290000e-01, -0.25600000)
UCI<-c( 8.280000e-01, -9.700000e-02, -1.450000e-01, -1.890000e-01, 8.020000e-01,  0.1240000, -6.480000e-02, -0.0369000000, -1.280000e-01,  0.05850000)
varno<-1:10
dat_1<-data.frame(cbind(coef,LCI,UCI,varno))

dat_2<- data.frame(cbind(sample(1:5, 10000, replace=T), rep(seq(1:10),1000)),c(rep(1,5000),rep(2,5000)))
colnames(dat_2)<-c("score","group","time")

【问题讨论】:

【参考方案1】:

将 'varno' 更改为一个因子并删除图 A 上的 scale_x_continuous(),你应该没问题,例如

library(ggplot2)
library(cowplot)
  
#data
coef<-c(7.780000e-01, -2.350000e-01, -2.820000e-01, -3.090000e-01, 7.560000e-01, -0.0210000, -2.000000e-01, -0.1790000000, -2.690000e-01, -0.10300000)
LCI<-c(7.240000e-01, -3.670000e-01, -3.940000e-01, -4.310000e-01, 6.950000e-01, -0.1720000, -3.510000e-01, -0.3050000000, -4.290000e-01, -0.25600000)
UCI<-c( 8.280000e-01, -9.700000e-02, -1.450000e-01, -1.890000e-01, 8.020000e-01,  0.1240000, -6.480000e-02, -0.0369000000, -1.280000e-01,  0.05850000)
varno<-1:10
dat_1<-data.frame(cbind(coef,LCI,UCI,varno))
  
dat_2<- data.frame(cbind(sample(1:5, 10000, replace=T), rep(seq(1:10),1000)),c(rep(1,5000),rep(2,5000)))
colnames(dat_2)<-c("score","group","time")

#plots
  
a<-ggplot(data=dat_1, aes(x=factor(varno), y=-coef, ymin=-LCI, ymax=-UCI))+ 
    geom_errorbar(width=0,size = 2,color="steelblue")+
    geom_point(size=5, color="steelblue")+
    geom_hline(yintercept=0, color="black", linetype="dashed", alpha=.5)+  #add x=0 line
    scale_y_continuous(name = "r")+
    ggtitle("A)")+
    theme_minimal()+ 
    theme(axis.text.x = element_blank(),
          axis.title.x = element_blank())
  
b<-ggplot(dat_2, aes(y=score, x=factor(group), fill=factor(time)))+ 
    geom_violin(position=position_dodge(0.5), trim=T)+
    scale_x_discrete()+
    labs(fill = "time",y="ratings")+
    ggtitle("B)")+
    theme_minimal()+ 
    theme(axis.text.x = element_text(angle = 90),
          axis.title.x = element_blank(),
          legend.position = "bottom")
  
  
plot_grid(a, b, align = "v", ncol = 1 )

【讨论】:

以上是关于将小提琴图与森林图对齐的主要内容,如果未能解决你的问题,请参考以下文章

彩色图与深度图对齐

彩色图与深度图对齐

将子图与颜色条对齐

ArcGIS处理每个栅格图行列号一致且上下对齐

中心在span标记中对齐SVG

ggplot:对齐多个刻面图-所有不同大小的刻面