大数跨境
0
0

ggplot2绘制多组合散点图

ggplot2绘制多组合散点图 R语言数据分析指南
2022-09-23
1

欢迎关注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元」后邀请进群,「一定让你感受到物超所值」「添加小编微信请备注来意,以便高效处理」

小编微信

关注下方公众号下回更新不迷路

【声明】内容源于网络
0
0
R语言数据分析指南
R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
内容 1180
粉丝 0
R语言数据分析指南 R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
总阅读410
粉丝0
内容1.2k