前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言可视化—饼图

R语言可视化—饼图

原创
作者头像
sheldor没耳朵
修改2024-08-15 12:13:28
1330
修改2024-08-15 12:13:28
举报
文章被收录于专栏:R语言可视化

R语言可视化—饼图

今天开始进行R语言可视化的练习,主要参照的是文献《Preoperative immune landscape predisposes adverse outcome in hepatocellular carcinoma patients with liver transplantation》中的配图,尽量复现,顺便以此夯实R语言基础操作。今天复现文章中的Fig.1A,即饼图绘制

Fig.1A文献中描述We sequenced the transcriptomes of a total of 124 samples, comprising 62 malignant tumors, 47 adjacent nontumors, and 15 normal samples, from a Korean HCC cohort (Fig. 1a and Supplementary Table 1).

首先我们从基础的极坐标绘图开始,极坐标绘图一般是先画柱形图,再转化为极坐标,如下图:

代码语言:r
复制
library(ggplot2)
# 创建示例数据
data1 <- data.frame(
  category = c("A", "B", "C", "D"),
  value = c(2, 3, 5, 4)
)
# 基本的柱状图
p <- ggplot(data1, aes(x = category, y = value)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  theme_minimal()
# 转换为极坐标
p + coord_polar(theta = "x", start = 0)
p + coord_polar(theta = "y", start = 0)

注:

ggplot(data, aes(x = category, y = value)):定义绘图的数据集和美学映射。

geom_bar(stat = "identity", fill = "skyblue"):绘制柱状图,并设置颜色。

coord_polar(theta = "x", start = 0):将柱状图转换为极坐标。

theta = "x"表示使用x轴进行极坐标转换,theta = "y"表示使用y轴进行极坐标转换,

start = 0 控制起始角度。

代码语言:r
复制
ggplot(data1, aes(x = "", y = value, fill = category))+
  geom_bar(width = 1, stat = "identity") +
  coord_polar(theta = "y")

将x值设为空,并且fill = category后,即可绘制常规的饼图。

接下来再对这张图进行修饰即可,观察Fig.1A,知道应该做如隐藏x,y轴、移除多余的图形元素、将value值标注在对应的色块中并且居中排列、将图例放在图的下方按照两列排列并隐藏图例名称、图例外有黑边包边。

代码语言:r
复制
ggplot(data1, aes(x = "", y = value, fill = category)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar(theta = "y") +
  labs(x = NULL, y = NULL, fill = "Category") +
  theme_void() + # 移除多余的图形元素
  geom_text(aes(label = value), 
            position = position_stack(vjust = 0.5), color = "black")+
  theme(legend.position = "bottom", 
        legend.title = element_blank()) + # 隐藏图例标题
  guides(fill = guide_legend(ncol = 2, 
                             override.aes = list(col = "black", size = 2)))

注:

position_stack(vjust = 0.5)用于控制标签在堆积条形图(或饼图)的堆叠位置中的显示方式。具体来说:

  • position_stack:这是一个位置调整函数,用于在堆叠的条形图或饼图中调整元素的位置。对于堆叠的条形图,它将标签按照条形的高度依次堆叠。
  • vjust = 0.5vjust是垂直对齐参数,取值范围是0到1:
    • vjust = 0 表示标签对齐在每个堆叠部分的底部。
    • vjust = 1 表示标签对齐在每个堆叠部分的顶部。
    • vjust = 0.5 表示标签对齐在每个堆叠部分的中间。

在饼图中,position_stack(vjust = 0.5)用于将标签(如百分比)放置在每个饼图扇形区域的中间位置,从而使得标签更清晰地显示在每个部分的中心。vjust = 0.5确保标签垂直居中。

举例说明:

  • vjust = 0:标签会贴近扇形的内圈边缘。
  • vjust = 1:标签会贴近扇形的外圈边缘。
  • vjust = 0.5:标签会居中,通常是最理想的显示位置。

搞懂这些基础知识就可以正式开始Fig.1A的绘制。

代码语言:r
复制
columnNames <- c("Normal", 
                 "Fibrosis low (FL)", 
                 "Fibrosis high (FH)", 
                 "Cirrhosis (CS)", 
                 "Dysplastic nodule low (DL)", 
                 "Dysplastic nodule high (DH)", 
                 "T1", 
                 "T2", 
                 "T3/4", 
                 "Mixed")
Values<- c(15, 10, 10, 10, 10, 7, 16, 29, 11, 6)
Colors <-  c('#bebdbd', '#bbe165', '#6e8a3c', '#546a2e', 
             '#f1c055', '#eb8919', '#f69693', '#f7474e', '#aa0c0b', '#570a08')
data <- data.frame(
  group = columnNames,
  value = Values
)
data$group <- factor(data$group,columnNames)
pie <- ggplot(data,aes(x="",y=value,fill=group))+
  geom_bar(width = 1,stat = "identity")+#画条形图
  coord_polar("y",start = 0,direction = -1)+#极坐标旋转
  scale_fill_manual(values = Colors)+
  geom_text(aes(label =  value), color = "black",
            position = position_stack(vjust = 0.5))+
  theme_void()+#全白主题,无网格
  theme(plot.title = element_blank(),legend.position = "bottom",legend.title = element_blank())+
  guides(fill = guide_legend(ncol = 2, 
                             override.aes = list(col = "black", size = 1)))

为了方便以后复用,可以将画图的代码包装成函数

代码语言:r
复制
#构建一个绘图函数,绘制饼图
drPiechart <- function(columnNames,Values,Colors,outputPdf){
  library(ggplot2)
  library(scales)
  library(RColorBrewer)
  library(dplyr)
  
  data <- data.frame(
    group = columnNames,
    value = Values
  )
  #将group列转换为因子类型,并按columnNames中的顺序排列
  data$group <- factor(data$group,columnNames)
  #绘制饼图
  pie <- ggplot(data,aes(x="",y=value,fill=group))+
    geom_bar(width = 1,stat = "identity")+#画条形图
    coord_polar("y",start = 0,direction = -1)+#极坐标旋转
    scale_fill_manual(values = Colors)+
    geom_text(aes(label =  value), color = "black",size = 4,
              position = position_stack(vjust = 0.5))+
    theme_void()+#全白主题,无网格
    theme(plot.title = element_blank(),legend.position = "bottom",legend.title = element_blank())+
    guides(fill = guide_legend(ncol = 2, 
                               override.aes = list(col = "black", size = 1)))
  
  #保存图片
  ggsave(outputPdf,pie,units = 'cm',height = 8,width = 16)
}

以后的数据直接调用即可

代码语言:r
复制
#调用函数
drPiechart(c("Normal", 
                 "Fibrosis low (FL)", 
                 "Fibrosis high (FH)", 
                 "Cirrhosis (CS)", 
                 "Dysplastic nodule low (DL)", 
                 "Dysplastic nodule high (DH)", 
                 "T1", 
                 "T2", 
                 "T3/4", 
                 "Mixed"), 
           c(15, 10, 10, 10, 10, 7, 16, 29, 11, 6), 
           c('#bebdbd', '#bbe165', '#6e8a3c', '#546a2e', 
             '#f1c055', '#eb8919', '#f69693', '#f7474e', '#aa0c0b', '#570a08'), 
           './results/Figure 1A.pdf')

其中如何在饼图外加分组名称暂未研究明白。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • R语言可视化—饼图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档