X |
sample2 |
sample1 |
sample3 |
---|---|---|---|
gene1 |
60 |
100 |
80 |
gene3 |
80 |
70 |
80 |
gene2 |
90 |
90 |
95 |
gene4 |
75 |
60 |
80 |
R语言绘制百分比柱形图
什么是百分比柱形图?
如图所示,它们分别是簇状柱形图、堆积柱形图、百分比柱形图。
顾名思义,
簇状柱形图,每组的数据,每个单独成柱,但是都簇集到一块儿;
堆积柱形图,是每组的数据都堆叠在同一个柱子上;
百分比柱形图,是在堆积柱形图的基础上,按照比例分布的。
绘图前的数据准备
demo数据可以在https://www.r2omics.cn/res/demodata/groupBar.txt下载。
包含2个维度的数据。每一行是一簇柱子,每一列用不同的颜色图例区分。(当然也可以反过来)
R语言绘制百分比柱形图
# 代码来源:https://www.r2omics.cn/
# 加载R包,没有安装请先安装 install.packages("包名")
library(tidyverse)
# 读取簇状、堆积、填充柱形图数据文件
= read.delim("https://www.r2omics.cn/res/demodata/groupBar.txt") # 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
df
# 把数据转换成ggplot常用的类型(长数据),并计算百分比,为了标记文本标签
= df %>%
df pivot_longer(-1,names_to = "Sample",values_to = "Value") %>%
group_by(X) %>%
mutate(percent = Value/sum(Value,na.rm = T)) %>% # 根据分组计算百分比
mutate(percent = paste0(round(percent*100,2),"%")) # 将小数转化为百分数
# 绘图
ggplot(df, aes(x=factor(X,levels =unique(X)), # 转化为因子,目的是显示顺序与文件顺序相同,否则按照字母顺序排序
y=Value,
fill=factor(Sample,levels = unique(Sample)),
+
))geom_bar( # 绘制柱形图,核心是position="fill"
position="fill",
stat="identity",
color = "black"
+
)# 文字标签
geom_text(aes(label=percent), # 添加文本标记,改变映射也可以标价原数字
position = position_fill(vjust = 0.5), # 标记位置
color="white",
size=3)+
scale_y_continuous(labels = scales::percent_format())+ # 改变Y轴的本文样式
labs(
x="", # 调整x轴名称
y="", # 调整y轴名称
fill="" # 调整图例名称
+
)scale_fill_brewer(palette = "Set2")+ # 配色方案
theme_bw()