其他
R 绘制柱形偏差图
点击上方关注我们
前几天有小伙伴在 老俊俊生信交流群 里发了一个柱形图,询问怎么绘制,于是今天分享一下绘制代码给大家,下面是小伙伴发的图:
这幅图绘制的关键点有两个:
1、排序 2、在图里添加文本标签,并为不同颜色
数据的话大家根据类似格式整理成就可以了。
首先加载 R 包,读取测试数据:
# 加载R包
library(ggplot2)
library(ggprism)
library(tidyverse)
# 读取数据
bar <- read.table('C:/Users/admin/Desktop/bar.txt',header = T)
# 查看数据
head(bar,3)
id B type
1 THYROID -1.821506 low
2 IMMUNE -1.652449 low
3 ACID -1.430220 low
接下来我们给数据排序,然后设置 因子类型的水平 就能按照排序的数值大小进行显示了:
# 升序排序
bar <- bar %>% arrange(B)
# 变成因子类型
bar$id <- factor(bar$id,levels = bar$id)
先默认画一张:
ggplot(data = bar,aes(x = id,y = B,fill = type)) +
geom_col() +
xlab('') + ylab('') +
# 主题
theme_prism(border = T)
emmm。。。,还差点味道,主要需要修改的有:1、去掉横坐标标签
2、坐标轴翻转
3、在图里添加文本
4、调颜色
5、添加虚线
。
开始优化:
# 绘图
p <- ggplot(data = bar,aes(x = id,y = B,fill = type)) +
geom_col() +
xlab('') + ylab('') +
# 主题
theme_prism(border = T) +
# 填充颜色
scale_fill_manual(values = c('high'= '#035397','none'='grey','low'='#4AA96C')) +
# 竖线
geom_hline(yintercept = c(-1,1),color = 'white',size = 1,lty='dashed') +
# 翻转坐标轴
coord_flip() + ylim(-2.5,2.5) +
# 去除坐标轴标签
theme(axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
# 移动图例位置
legend.position = c(0.1,0.9))
p
然后添加文本标签,这里我们用到 geom_text 函数,分四次添加,注意我们排序是 从小到大排序 的,所以为 添加文本标签也从下到上添加 :
# 添加标签在图里
# 小于-1的数量
low1 <- bar %>% filter(B < -1) %>% nrow()
# 小于0总数量
low0 <- bar %>% filter( B < 0) %>% nrow()
# 小于1总数量
high0 <- bar %>% filter(B < 1) %>% nrow()
# 总的柱子数量
high1 <- nrow(bar)
# 依次从下到上添加标签
p + geom_text(data = bar[1:low1,],aes(x = id,y = 0.1,label = id),
hjust = 0,color = 'black') + # 小于-1的为黑色标签
geom_text(data = bar[(low1 +1):low0,],aes(x = id,y = 0.1,label = id),
hjust = 0,color = 'grey') + # 灰色标签
geom_text(data = bar[(low0 + 1):high0,],aes(x = id,y = -0.1,label = id),
hjust = 1,color = 'grey') + # 灰色标签
geom_text(data = bar[(high0 +1):high1,],aes(x = id,y = -0.1,label = id),
hjust = 1,color = 'black') # 大于1的为黑色标签
这张图就完美复现了,大家只要改变一下输入数据,后面代码全部直接运行即可,是不是非常的方便。
我们还可以把颜色映射给 B,得到颜色渐变的柱子:
# 绘图
p <- ggplot(data = bar,aes(x = id,y = B,fill = B)) +
geom_col() +
xlab('') + ylab('') +
# 主题
theme_prism(border = T) +
# 填充颜色
# scale_fill_manual(values = c('high'= '#035397','none'='grey','low'='#4AA96C')) +
scale_fill_gradient2(low = '#FFC074',mid = '#B6C867',high = '#01937C') +
# 竖线
geom_hline(yintercept = c(-1,1),color = 'white',size = 1,lty='dashed') +
# 翻转坐标轴
coord_flip() + ylim(-2.5,2.5) +
# 去除坐标轴标签
theme(axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
# 移动图例位置
legend.position = c(0.1,0.9))
# 添加标签在图里
# 小于-1的数量
low1 <- bar %>% filter(B < -1) %>% nrow()
# 小于0总数量
low0 <- bar %>% filter( B < 0) %>% nrow()
# 小于1总数量
high0 <- bar %>% filter(B < 1) %>% nrow()
# 总的柱子数量
high1 <- nrow(bar)
# 依次从下到上添加标签
p + geom_text(data = bar[1:low1,],aes(x = id,y = 0.1,label = id),
hjust = 0,color = 'black') + # 小于-1的为黑色标签
geom_text(data = bar[(low1 +1):low0,],aes(x = id,y = 0.1,label = id),
hjust = 0,color = 'grey') + # 灰色标签
geom_text(data = bar[(low0 + 1):high0,],aes(x = id,y = -0.1,label = id),
hjust = 1,color = 'grey') + # 灰色标签
geom_text(data = bar[(high0 +1):high1,],aes(x = id,y = -0.1,label = id),
hjust = 1,color = 'black') # 大于1的为黑色标签
想要测试数据的可以公众号私信我哈!
END
发现更多精彩
关注公众号
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
推 荐 阅 读