{ggh4x}:如何精修你的图片!让你的作图技能更上一层楼~

学术   教育   2024-03-01 16:38   浙江  

今天介绍一个实用的作图R包{ggh4x},让{ggplot2}更加强大~


下面将从facet函数、guides函数,以及scale函数等几个方面介绍。


安装并载入R包:


install.packages("ggh4x")
library(ggh4x)

创建作图数据:


set.seed(1)
df <- data.frame(
  category = rep(c("A", "B", "C"), each = 20),
  group = rep(c("G1", "G2"), 30),
  test = rep(c("t1", "t2", "t3", "t4", "t5"), 12),
  value = rnorm(30, 10, 2),
  value2 = rnorm(30, 5, 2)
)

summary(df)


上述数据包含三个分类变量和两个连续变量。

创建一张基础图片p1备用:

p1 <- ggplot(df, aes(x = category, y = value, fill = group)) +
  geom_col(position = "dodge") +
  labs(x = "Categories", y = "Values", fill = "Groups") +
  theme_light()
p1

首先看看facet相关内容。

facet_wrap2()函数,与原有的facet_wrap()作用类似:

p1 + facet_wrap2(~test)

在基础功能上,还能更精细调整每一张亚图的x与y轴上标签、刻度:

p1 + facet_wrap2(~test,
                axes = "all", # 展示所有亚图上x和y轴的刻度文字和刻度点
                remove_labels = "x") # 去除重叠部分x轴上刻度文字

同理,其中的新函数facet_grid2()也与facet_grid()作用类似,但是也增加了更精准调节x与y轴的功能:

p1 + facet_grid2(group ~ test,
                 axes = "all", # 包含:x, y, all
                 scales = "free") # 包含:fixed(默认), free_x, free_y, free

还新增了facet_nested()函数:

p1 + facet_nested(~ group + category,
                  scales = "free"

上述代码中的scales = "free",大家可以试试去掉运行,看看有什么改变~

还可以将图上方的分组栏移到底部:

p1 + facet_nested(~ group + category,
                  scales = "free",
                  switch = "x") +
  theme(ggh4x.facet.nestline = element_line(colour = "gold3"))

上方代码,ggh4x.facet.nestline = element_line(colour = "gold3")修改了分隔线的颜色。

如果还觉得不够,可以看看facet_manual()

my_style <- matrix(c(1,2,3,4, 5, 5), 2, 3) # 自定义亚图片排列布局

p1 + facet_manual(~ test, my_style)

除了facet相关,R包{ggh4x}guides()函数也添加了许多新用法。

再画出一张图p2备用:

p2 <- ggplot(df, aes(x = value, y = value2, color = group)) +
  geom_point(show.legend = F) +
  theme_classic()
p2

如果想画缩短的x轴,可以试试guide_axis_truncate()

p2 + guides(x = guide_axis_truncated(trunc_lower = 8, trunc_upper = 12))

还兼容scale_*()函数,如果想增加连续变量y上的小刻度(minor ticks),并且限制在某个范围内,可以这么做:

p2 + scale_y_continuous(guide = "axis_minor",
                        minor_breaks = seq(6, 8, by = 0.2))

还可以调整大刻度(major ticks)与小刻度的长度:

p2 + scale_y_continuous(guide = "axis_minor",
                        minor_breaks = seq(6, 8, by = 0.2)) +
  theme(axis.ticks.length = unit(2, "mm"),
        ggh4x.axis.ticks.length.minor = rel(1)) # 调整大刻度和小刻度的比例

上图中,使用代码ggh4x.axis.ticks.length.minor = rel(1)后,小刻度就与原来的大刻度等长了。

上面介绍了R包{ggh4x}的部分内容,感兴趣可以查看参考资料中的链接哦~

好啦,今天的内容就到这里。如果有帮助,记得分享给需要的人

参考文献

[1]. https://github.com/teunbrand/ggh4x

公众号的线上课程
1. 《R语言和统计新手课程》
2. 《回归:从入门到进阶》

统计咨询
《服务介绍和经典合作案例》

公众号核心成员的成果发表
《SCI医学1区影响因子9分论文》

公众号核心成员担任SCI杂志Associate Editor!
《JAD杂志Associate editor》
《Frontiers in Neuroscience, Frontiers in Neurology and Frontiers in Psychiatry杂志的神经退行性病变板块》

▌本文由R语言和统计首发
▌课程相关咨询可添加R师妹微信: kefu_rstats
▌编辑:June
▌邮箱:contact@rstats.cn
▌网站:www.rstats.cn
我们致力于让R语言和统计变得简单!




R语言和统计
我们定期更新与R有关的内容,比如R编程基础,作图,实用R包的解读,统计学基础知识,前沿的统计方法,机器学习等等。
 最新文章