From 24e933d4770cc230ccca3e9355e2c6e6ab1ccbde Mon Sep 17 00:00:00 2001 From: ixxmu Date: Tue, 19 Nov 2024 01:15:50 +0000 Subject: [PATCH] =?UTF-8?q?gground=20=E2=80=94=E2=80=94=20=E7=BB=98?= =?UTF-8?q?=E5=88=B6=E5=9C=86=E8=A7=92=E7=9F=A9=E5=BD=A2=E5=B0=B1=E6=98=AF?= =?UTF-8?q?=E8=BF=99=E4=B9=88=E7=AE=80=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...77\231\344\271\210\347\256\200\345\215\225.md" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 "docs/2024-11/gground____\347\273\230\345\210\266\345\234\206\350\247\222\347\237\251\345\275\242\345\260\261\346\230\257\350\277\231\344\271\210\347\256\200\345\215\225.md" diff --git "a/docs/2024-11/gground____\347\273\230\345\210\266\345\234\206\350\247\222\347\237\251\345\275\242\345\260\261\346\230\257\350\277\231\344\271\210\347\256\200\345\215\225.md" "b/docs/2024-11/gground____\347\273\230\345\210\266\345\234\206\350\247\222\347\237\251\345\275\242\345\260\261\346\230\257\350\277\231\344\271\210\347\256\200\345\215\225.md" new file mode 100644 index 00000000..93027c68 --- /dev/null +++ "b/docs/2024-11/gground____\347\273\230\345\210\266\345\234\206\350\247\222\347\237\251\345\275\242\345\260\261\346\230\257\350\277\231\344\271\210\347\256\200\345\215\225.md" @@ -0,0 +1,15 @@ +--- +title: "gground —— 绘制圆角矩形就是这么简单" +date: 2024-11-19T01:15:08Z +draft: ["false"] +tags: [ + "fetched", + "生信杂货铺" +] +categories: ["Acdemic"] +--- +gground —— 绘制圆角矩形就是这么简单 by 生信杂货铺 +------ +

gground

gground 是一个 ggplot2 的扩展包,可用于生成圆角图形,例如圆角条形图和箱线图等,以帮助用户创建更美观且独特的可视化效果。


特点

  • ggplot2 完美结合,在同名函数前加上 round 标识,但是语法完全一样,只是多了一个 radius 参数,用于控制圆角的弧度
  • radius 参数设置需要谨慎,不要太大。过渡的圆角化会导致数据展示不全

安装

可以直接从 GitHub[1] 安装,暂时没有上传到 CRAN

if (!require("devtools", quietly = TRUE))
  install.packages("devtools")

devtools::install_github("dxsbiocc/gground")

使用方式

gground 提供了各种图形功能,可以无缝集成到 ggplot2 中,帮助用户创建更美观、独特的数据可视化效果。

导入

library(gground)
library(tidyverse)

1. geom_round_bar

条形图

ggplot(mpg, aes(y = class)) +
  geom_round_bar(aes(fill = drv), position = position_stack(reverse = TRUE)) +
  theme(legend.position = "top")

2. geom_round_col

df <- data.frame(trt = c("a""b""c"), outcome = c(2.31.93.2))
ggplot(df, aes(trt, outcome)) +
  geom_round_col()

3. geom_round_boxplot

箱线图也很不错

p <- ggplot(mpg, aes(class, hwy))

p + geom_round_boxplot(aes(fill = class), outlier.colour = 'red'
                       outlier.shape = 1, radius = unit(0.1'inches')) + 
  geom_jitter(width = 0.2) +
  theme_minimal()

4. geom_round_rect

圆角矩形绘制,其他很多图都是基于这个函数

df <- data.frame(
  x = rep(c(257912), 2),
  y = rep(c(12), each = 5),
  z = factor(rep(1:5, each = 2)),
  w = rep(diff(c(04681014)), 2)
)

ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +
  geom_round_rect(aes(fill = z), colour = "grey50", radius = unit(5'mm'))

5. geom_round_tile

ggplot(mpg) +
  geom_round_tile(aes(x = factor(cyl), y = factor(drv), fill = factor(class)),
                  radius = unit(0.1'npc')) +
  theme_minimal()

6. geom_round_crossbar

crossbar 绘制

df <- data.frame(
  trt = factor(c(1122)),
  resp = c(1534),
  group = factor(c(1212)),
  upper = c(1.15.33.34.2),
  lower = c(0.84.62.43.6)
)
p <- ggplot(df, aes(trt, resp, colour = group))
p + geom_round_crossbar(aes(ymin = lower, ymax = upper), width = 0.2) +
  geom_point(position = position_dodge(width = 0.2)) +
  theme_minimal()

7. geom_round_histogram

绘制直方图

ggplot(diamonds, aes(price, fill = cut)) +
  geom_round_histogram(binwidth = 500) +
  theme_minimal()

8. geom_round_half_boxplot

还支持绘制半个箱线图

ggplot(iris, aes(x = Species, y = Petal.Width, fill = Species)) +
  geom_round_half_boxplot() +
  theme_minimal()

也可以与其他半个图形结合使用

ggplot() +
    
    geom_round_half_boxplot(
        data = iris %>% filter(Species=="setosa"), 
        aes(x = Species, y = Sepal.Length, fill = Species), outlier.color = NA) +
    
    ggbeeswarm::geom_beeswarm(
        data = iris %>% filter(Species=="setosa"),
        aes(x = Species, y = Sepal.Length, fill = Species, color = Species), side = 1
    ) +
    
    geom_half_violin(
        data = iris %>% filter(Species=="versicolor"), 
        aes(x = Species, y = Sepal.Length, fill = Species), side="r") +
    
    geom_half_dotplot(
        data = iris %>% filter(Species=="versicolor"), 
        aes(x = Species, y = Sepal.Length, fill = Species), method="histodot", stackdir="down") +
    
    geom_round_half_boxplot(
        data = iris %>% filter(Species=="virginica"), 
        aes(x = Species, y = Sepal.Length, fill = Species), side = "r", errorbar.draw = TRUE,
        outlier.color = NA) +
    
    geom_half_point(
        data = iris %>% filter(Species=="virginica"), 
        aes(x = Species, y = Sepal.Length, fill = Species, color = Species), side = "l") +
    
    scale_fill_manual(values = c("setosa" = "#cba1d2""versicolor"="#7067CF","virginica"="#B7C0EE")) +
    scale_color_manual(values = c("setosa" = "#cba1d2""versicolor"="#7067CF","virginica"="#B7C0EE")) +
    theme(legend.position = "none")

9. polar

绘制极坐标图形,只要添加 coord_polar 即可,很是方便

group_by(mpg, class) %>%
    summarise(percent = n() / nrow(mpg)) %>%
    ggplot(aes(x = 1, y = percent, fill = class)) +
    geom_round_col(colour = "white", radius = unit(2'pt')) +
    coord_polar(theta = 'y') +
    xlim(c(02)) +
    theme_minimal()

10. element_round_rect

最后,还支持对主题的修改,继承子 element_rect 函数,可以更好的设置圆角边框。

ggplot(mpg) +
  geom_boxplot(aes(x = cyl, y = displ, fill = class)) +
  theme(
    legend.background = element_round_rect(linewidth = 1, colour = "grey", radius = unit(5'pt'))
  )

结尾


任何代码的问题都可以在知识星球中提问,自愿加入。

参考资料
[1]

GitHub: https://github.com/dxsbiocc/gground


+
+原文链接