欢迎关注R语言数据分析指南
❝本周VIP群中有朋友问下图的绘制方法,其主要也是绘制点图,条形图等多种类型图形的组合,绘图倒也简单,主要还是细节的调整,由于原文没有提供数据,小编自己构造了一份数据来进行数据可视化,结果无实际意义,下面来看具体案例;「数据及代码已经上传VIP群,加群的观众老爷请自行下载」
❞
❝❞
有需要学习数据可视化的朋友欢迎加入小编2022年度VIP群,目前群内已经上传公众号文档「数据+代码约200篇」,VIP交流群(1)已经500人满员,随着内容不断增多,为了更好的创做内容现在进群需「付费149元」,若转发此文档到朋友圈集赞20个可优惠20元,早进早享受;「一定让你感受到物超所值」
安装并加载R包
package.list=c("tidyverse","aplot","RColorBrewer","ggtree")
for (package in package.list) {
if (!require(package,character.only=T, quietly=T)) {
install.packages(package)
library(package, character.only=T)
}
}
数据清洗
data <- read_tsv('data.txt',col_names=F) %>%
select(1,2,6) %>%
group_by(X1,X6) %>%
count(X2) %>% ungroup() %>% select(-2) %>%
pivot_wider(., names_from =X2,values_from = n) %>%
mutate_all(~replace(.,is.na(.), 0)) %>%
pivot_longer(-X1) %>%
mutate(value=as.character(value),signif=value,
signif=case_when(value=="0" ~ " ",TRUE ~ as.character(value)),
name=case_when(name=="Box II -like sequence" ~
"Box II -like sequence ",
TRUE ~ as.character(name)),
n=str_remove(X1,"gene") %>% as.numeric()) %>%
arrange(n)
###构建分组
df <- data %>% select(name) %>% distinct() %>%
mutate(group= rep(LETTERS[1:3],times=c(8,6,9)
)) %>% left_join(.,data,by="name")
df$X1 <- factor(df$X1,levels=df$X1 %>% rev() %>% as.data.frame() %>%
distinct() %>% pull())
df$name <- factor(df$name,levels = unique(df$name))
绘制主图
p1 <- df %>% mutate(value=as.numeric(value)) %>%
filter(value==0) %>%
ggplot(aes(name,X1))+
geom_point(aes(fill=group),color="white",size=3,pch=21)+
labs(x=NULL,y=NULL)+
scale_fill_manual(values=c("#12618D","#EDB749","#3CB2EC"))+
theme(axis.text.x=element_text(angle = 45,hjust=1,vjust=1,color="black"),
axis.text.y=element_blank(),
axis.line = element_line(color = "white",size = 0.4),
axis.ticks.y=element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_line(size = 0.8,color = "grey60"),
panel.background = element_blank(),
legend.position = "non")
绘制barplot
p2 <- pivot_wider(df %>% select(name,X1,value),names_from=name,
values_from = value) %>%
column_to_rownames(var="X1") %>%
mutate(across(where(is.character),as.numeric)) %>%
summarize(across(is.numeric,sum)) %>%
rownames_to_column(var="id") %>%
pivot_longer(-id) %>%
ggplot(aes(name,value))+
geom_col(fill="grey50",size=0.5)+
geom_text(aes(label=value),hjust=0.5,vjust=0,color="black",size=3.5) +
scale_y_continuous(limits = c(0,110),expand = c(0,1)) +
labs(x=NULL,y=NULL)+
theme_classic()+
theme(axis.text.x=element_blank(),
axis.text.y=element_text(color="black"),
axis.ticks.x =element_blank())
构建聚类树
hr <- pivot_wider(df %>% select(name,X1,value),names_from=name,
values_from = value) %>%
column_to_rownames(var="X1") %>%
mutate(across(where(is.character),as.numeric))
p3 <- hclust(dist(hr)) %>%
ggtree(layout="rectangular", branch.length="none")+
theme_void()
构建色块
p4 <- hr %>% rownames_to_column(var="gene") %>%
rowwise() %>%
mutate(sum = sum(across(where(is.numeric)))) %>%
select(gene,sum) %>%
mutate(group="A") %>%
ggplot(aes(group,gene,fill=sum))+
geom_tile()+
scale_color_gradientn(colours = rev(RColorBrewer::brewer.pal(11,"RdBu")))+
scale_fill_gradientn(colours = rev(RColorBrewer::brewer.pal(11,"RdBu")))+
theme_void()+
theme(legend.position = "non")
拼图
p1 %>% insert_top(p2,height=0.2) %>%
insert_left(p4,width=0.1) %>%
insert_left(p3,width = 0.3)
❝可以看到通过上述代码形式上比较类似了,主要还是在于细节的调控以及对图形数据的把握,喜欢的观众老爷欢迎分享转发;「当然更推荐大家加入我的VIP交流群」扫描下方二维码加小编微信「付费149元」后邀请进群,「一定让你感受到物超所值」,「添加小编微信请备注来意,以便高效处理」
❞
小编微信


