做两个指标的相关性,同时还要计算两个指标的大小
想到之前看到过一篇推送中教程的图片,便作为参考并进行改编
结果如下
library(ggplot2)
library(ggpubr)
library(patchwork)
library(ggpmisc)
## 只取一部分数据进行实例
iris2 <- subset(iris,Species %in% c('setosa','versicolor'))
## 画右侧的图形
## 需要设置vjust参数,否则显著性***可能没有足够空间显示
## 如果不设置vjust参数,则可以通过修改xlim和ylim,但可能会使得主图散点分布距离边界太远
(p.r <- ggboxplot(iris2,
x = "Species",
y = "Sepal.Length",
fill = "Species",
palette = c("#00AFBB", "#E7B800"),
add = "jitter",
add.params = list(fill = "white"))+
stat_compare_means(comparisons = list(c('setosa','versicolor')), label = "p.signif",size=10,vjust=0.6)+
One_theme()+
theme(axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.title = element_blank()))
## 画上部分图形
(p.u <- ggboxplot(iris2,
x = "Species",
y = "Sepal.Width",
fill = "Species",
palette = c("#00AFBB", "#E7B800"),
add = "jitter",
add.params = list(fill = "white"))+
stat_compare_means(comparisons = list(c('setosa','versicolor')), label = "p.signif",size=10,vjust=0.6)+
coord_flip()+
One_theme()+
theme(axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.title = element_blank()))
## 画主图
## vstep 设置两组统计信息的间距
(p3 <- ggplot(iris2, aes (x=Sepal.Width, y=Sepal.Length,fill=Species)) +
geom_point(alpha=1,size=3, shape=21)+
geom_smooth(method='lm',colour="black",size=1,level=0.95,show.legend = F)+
scale_fill_manual(values = c("#00AFBB", "#E7B800"),name='')+
scale_color_manual(values = c("#00AFBB", "#E7B800"),name='')+
labs(x='Sepal Width',y='Sepal Length')+
stat_poly_eq(aes(color=Species,label = paste(
#..eq.label.., ## 方程展示
..adj.rr.label..,
..p.value.label..,
sep = '~~~')),
label.x='right',
formula = y ~ x, parse = T,size=5,vstep = 0.1)+
xlim(ggplot_build(p.u)$layout$panel_scales_y[[1]]$range$range) +
ylim(ggplot_build(p.r)$layout$panel_scales_y[[1]]$range$range) +
One_theme()+
theme(axis.text.x = element_text(size=15,color = 'black'),
axis.text.y = element_text(size=15,color = 'black'),
axis.title.x = element_text(size = 15,face = 'bold'),
axis.title.y = element_text(size = 15,face = 'bold')))
# 单独提取并制作图例
leg <- get_legend(p3+theme(legend.position = 'top',legend.background = element_blank(),
legend.text = element_text(size=15))+
guides(fill = guide_legend(nrow = 2,override.aes = list(size=7))))
# 将图例转换为图片
as_ggplot(leg)
## 组合图形
p.u +as_ggplot(leg)+p3+ p.r +
plot_layout(heights = c(1,4),widths = c(4,1),ncol = 2,nrow = 2)
## 输出图形
pdf(paste0(output,'Length-Width.pdf'),onefile=F,height=6.5,width=6.5)
p.u +as_ggplot(leg)+p3+ p.r +
plot_layout(heights = c(1,4),widths = c(4,1),ncol = 2,nrow = 2)
dev.off()
组合图形主要需要考虑一些细节对齐以及展示的问题
比如ggpubr:::stat_compare_means
中vjust
参数调节*
的位置;ggpmisc:::stat_poly_eq
中vstep
参数调节两组数值的间距
我们设置了右边与上边两个图形的坐标轴标签和标题都为空白,在ggplot2有两种方式,第一种是通过labs(x='',y='')
将其赋值为空白,但是这种方法在组合图形的时候,会导致两组图形之间存在较大的间距,因为我们只是将标签和标题设置为了空,但是作图时仍然保留了其在图片上的位置,因此,通过对theme
函数的设置,可以保证彻底不对该部分进行作图,便减少了空白间距