R语言基础 - 饼图piechart

R语言基础绘图 —— 饼图piechart

数据准备

这里展示变异注释类型所占百分比:

filename <- "data/Count_by_effects.csv"
df <- read.csv(filename)
# 去除百分比符号,并转换为数值
df$Percent <- as.numeric(gsub("%""", df$Percent))
# 四舍五入到4位小数
df$Percent <- round(df$Percent, 2)
df <- df[order(-df$Percent), ][1:10, ]
head(df)

baseR绘制饼图

调用 pie() 函数即可:

library(Cairo)
library(paletteer)

colors <- paletteer_d("ggthemes::Classic_Green_Orange_12")

CairoPDF("test.pdf", width=7, height=2.5)
par(mar=c(0008), oma=c(00015))
# 增加科学计数法的惩罚值
options(scipen = 999)
pie(x = df$Count, 
    labels = ""
    cex = 1
    radius = 1
    clockwise = TRUE
    col = colors,
    border = NA,
    main = NA)

# 添加图例
legend(x = 1.2,
       y = 1,
       legend = paste0(df$Type, " (", df$Percent, "%)"),
       bty = "n",
       fill = colors,
       border = NA,
       #title = "SNP effect",
       xpd = NA,
       cex = 1)

dev.off()
  • x: 这个参数接受一个数值向量,表示每个饼图片段的大小。

  • labels: 用于指定每个饼图片段旁边显示的标签。这里因为我们的类别太多,如果都展示的话会显得很拥挤,所以这里给一个空的字符串。

  • cex: 字符扩展大小(Character EXpansion size)。这个参数用于控制标签的字体大小,其中**1是默认大小,小于1的值会缩小字体,大于1**的值会放大字体。

  • radius: 饼图的半径,可以用来控制饼图的大小。在这里,**radius = 1**表示使用默认的半径大小。

  • clockwise: 一个逻辑值(TRUE或FALSE),用于指定饼图的绘制方向。**TRUE表示饼图的片段将按顺时针方向绘制,而FALSE**(默认值)表示按逆时针方向绘制。

  • col: 为饼图的每个片段指定颜色。**colors是一个颜色向量,它的长度应该和x**参数的长度相匹配。每个饼图片段将按照这个向量中颜色的顺序进行着色。

  • main: 指定饼图的主标题。

注意:我们这里绘制的图例标签非常长,为了将其完全展示出来,需要设置这几个参数:

  • 图片长宽

  • 使用**par(mar=c())par(oma=c())调整边界。mar用于设置图形四周的边界大小,而oma**用于设置外边界大小。

  • **inset=c(-0.3, 0)xpd=NA**参数确保图例即使很长也不会被裁剪,且能够完全展示在绘图区域之外。

ggplot2绘制饼图

ggplot2 可以通过设置坐标轴的方式将条形图转换为饼图。

用 ggplot2 绘制饼图的优势在于我们可以更精细的控制图形的细节,例如特定主题,图例标题的位置等,但由于 ggplot2 并没有原生的饼图函数,所以我们无法很方便的像 baseR 绘图那样为饼图的每个区域添加指定的文本标签。

library(ggplot2)
library(dplyr)

df$Type <- factor(df$Type, levels = df$Type)

p <- ggplot(df, aes(x = "", y = Count, fill = Type)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  scale_fill_manual(
    values = colors,
    labels = paste0(df$Type, " (", df$Percent, "%)")
  ) +
  labs(fill = "SNP effect type") +
  theme_void() +
  theme(
    legend.text = element_text(size = 12),
    legend.key.size = unit(0.5"cm"),
    legend.title = element_text(size = 14, face = "bold"))

CairoPDF("test2.pdf", width=7, height=3)
print(p)
dev.off()

本文由 mdnice 多平台发布

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值