ggplot2優雅的繪制餅狀熱圖

歡迎關注R語言數據分析指南

最近看到一張非常有意思的圖,暫且稱之為餅狀熱圖,與corrplot所繪制的有所不同此圖使用的為離散型變量,例圖如下所展示;由于作者未提供原始數據,小編自己構建了一份數據來進行初步的展示

論文內容

Systematic profiling of the chicken gut microbiome reveals dietary supplementation with antibiotics alters expression of multiple microbial pathways with minimal impact on community structure

此圖乍一看覺得似曾相識,但是仔細一看又會發現好像不是那么的容易;應該是沒有現成的包來一步出圖,由于作者也未有提供數據那只有靠猜數據結構來進行可視化了,細節當然是很多,小編這次只是繪制主體圖,細節問題留待以后再做介紹

加載R包

library(tidyverse)
library(scatterpie)
library(ggsci)
library(cowplot)

數據清洗

p <- read_tsv("data1.txt") %>% 
  filter(Compartments %in% c("BS","RS","RE","VE","SE","LE")) %>% 
  select(1,2,Compartments) %>% 
  left_join(.,read_tsv("data2.txt") %>% column_to_rownames(var="FAPROTAX") %>% t() %>% 
              as.data.frame() %>%
              rownames_to_column(var="Compartments") %>% 
              pivot_longer(-Compartments),by="Compartments") %>% 
  filter(Compartments=="BS",
         SampleID %in% c(read_tsv("data1.txt") %>% select(1) %>% 
                           distinct() %>% head(10) %>% pull())) %>% 
  select(-value,-Compartments) %>% 
  group_by(SampleID,name) %>% count(Phylum) %>% 
  pivot_wider(.,names_from=Phylum,values_from = n)

構建繪圖數據

df <- p %>% left_join(.,p %>% select(name) %>% distinct() %>% rownames_to_column(var="lat"),by="name") %>% 
  mutate(long=case_when(SampleID =="BCCCK1" ~1,SampleID =="BCCCK2" ~2,SampleID =="BCCCK3" ~3,
                        SampleID =="BCCNPK1" ~4,SampleID =="BCCNPK2" ~5,SampleID =="BCCNPK3" ~6,
                        SampleID =="BCCNPKM1" ~7,SampleID =="BCCNPKM2" ~8,SampleID =="BCCNPKM3" ~9,
                        SampleID =="BHLCK1" ~10),lat=as.numeric(lat))

繪制餅狀熱圖

p1 <- ggplot(aes(x=long,y=lat),data=df) +
  geom_tile(color="black",fill="white")+
  geom_scatterpie(aes(x=long,y=lat,r=0.4),data=df, color=NA,
                           cols=c("Abditibacteriota","Acidobacteriota","Actinobacteriota",
                                  "Alphaproteobacteria","Bacteroidota")) +
                             coord_equal()+
  scale_fill_brewer()+
  scale_x_discrete(expand = c(0,0))+
  scale_y_discrete(expand = c(0,0))+
  theme_test()+
  theme(axis.text.x=element_text(angle = 90,vjust = 0.5,hjust = 1),
        axis.ticks = element_blank(),
        axis.text.y=element_blank(),
        axis.title = element_blank(),
        legend.title = element_blank(),
        legend.key=element_blank(),   # 圖例鍵為空
        legend.text = element_text(color="black",size=9), # 定義圖例文本
        legend.spacing.x=unit(0.1,'cm'), # 定義文本書平距離
        legend.key.width=unit(0.5,'cm'), # 定義圖例水平大小
        legend.key.height=unit(0.5,'cm'), # 定義圖例垂直大小
        legend.background=element_blank())

繪制文本

p2 <- df %>% select(name,lat) %>% arrange(lat) %>% mutate(type="A") %>% 
  ggplot(aes(type,name))+
  coord_cartesian(clip="off")+
  scale_x_discrete(expand = c(0,0))+
#  scale_y_discrete(expand = c(0,0))+
  theme(panel.background = element_rect(fill="white"),
        axis.ticks = element_blank(),
        axis.text.y=element_text(color="black"),
        axis.title=element_blank(),axis.text.x=element_blank())

拼圖

ggdraw(xlim=c(-0.45,1))+ 
  draw_plot(p2,x=-0.4)+
  draw_plot(p1,x=0.06)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容