首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R tips:ggtext的geom_richtext图层的格式调整和使用

R tips:ggtext的geom_richtext图层的格式调整和使用

作者头像
生信菜鸟团
发布2021-04-29 11:29:00
发布2021-04-29 11:29:00
1.7K00
代码可运行
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团
运行总次数:0
代码可运行

ggtext的geom_richtext可以使用Markdown或者html语法来拓展ggplot2的文字图层geom_label用法。最近在使用ggtext时,有一个需要geom_text的效果的需求,但是ggtext的图层效果都是类似于geom_label的,要想使用geom_text效果可以通过参数设置来实现。geom_label和geom_text的视觉区别在于是否有一个边框区域。

以iris数据为例,一个简单的注释文本如下图所示,它有两个不符合刚才所述的需求的地方:

  • geom_richtext图层信息出现了legend;
  • 注释文本是geom_label风格,而不是geom_text风格。
代码语言:javascript
代码运行次数:0
运行
复制
library(tidyverse)
iris %>% ggplot(aes(x = Sepal.Length, 
                    y = Sepal.Width,
                    color = Species)) + 
  geom_boxplot() + 
  ggtext::geom_richtext(aes(x = 6, y = 4, 
                            label = 'test text',
                            )
                        )

模拟geom_text风格

要去除一个图层的legend信息只需要设置图层的show.legend选项即可。

代码语言:javascript
代码运行次数:0
运行
复制
library(tidyverse)
iris %>% ggplot(aes(x = Sepal.Length, 
                    y = Sepal.Width,
                    color = Species)) + 
  geom_boxplot() + 
  ggtext::geom_richtext(aes(x = 6, y = 4, 
                            label = 'test text',
                            ),
                        show.legend = FALSE
                        )

geom_text风格需要调整三个地方:label边框去除、label底色去除、文本颜色调整。

这三个参数分别由label.colour、 fill、color控制。

fill、color还可以映射变量,和普通的ggplot2的geom_label类似,如果需要可以在aes函数中定义它。但是如果是映射的常量,则需要在aes函数外定义。

代码语言:javascript
代码运行次数:0
运行
复制
iris %>% ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + 
  geom_boxplot() + 
  ggtext::geom_richtext(aes(x = 6, y = 4, 
                            label = 'test text',
                            ),
                        color = 'black',
                        label.colour = NA,
                        fill = NA,
                        show.legend = FALSE
                        )

ggtext的使用举例

上面均是测试的'test text',但是这体现不出geom_text的功用,以一个较为复杂的label为例:注释文本分为两行,第一行为红色字体,第二行以空格开头,并使用上下标标签。

代码语言:javascript
代码运行次数:0
运行
复制
iris %>% ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + 
  geom_boxplot() + 
  ggtext::geom_richtext(aes(x = 6, y = 4, 
                            label ='<p style = "color:red;">first line</p>\n<span> </span> R^2 r<sub>1</sub>',
                            ),
                        color = 'black',
                        label.colour = NA,
                        fill = NA,
                        show.legend = FALSE
                        )

这里的上标使用的^字符,也可以html的sup标签。

至于上面的例子中特地提到换行和空格,是因为他们配合R中的无穷量Inf,可以实现一个相对优雅的固定排版布局。

比如我们想实现一个label在右上角的布局,那么就可以设置x和y均是Inf,则label会出现在x和y的最大值处,在图中也就是右上角的位置,再通过hjust和vjust控制此label的中心点,即可实现注释文本永远在右上角对齐的效果,这种稳健的写法非常适合自己需要写工具函数的时候。PS:为了显示label的大小,注释文本添加了一个蓝色的边框。

代码语言:javascript
代码运行次数:0
运行
复制
iris %>% ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + 
  geom_boxplot() + 
  ggtext::geom_richtext(aes(x = Inf, y = Inf, 
                            label ='<p style = "color:red;">first line</p>\n<span> </span> R^2 r<sub>1</sub>',
                            ),
                        hjust = 1,
                        vjust = 1,
                        color = 'black',
                        label.colour = 'blue',
                        fill = NA,
                        show.legend = FALSE
                        )

如果label距边框远一些,也许效果会更好,通过换行和空格可以实现,也就是下图。

换行可以通过多种形式实现:br标签,空的p标签以及\n标识,空格可以通过正常的空格、&nbsp;字符以及空的span标签,如果一种效果不好就尝试另一种。

代码语言:javascript
代码运行次数:0
运行
复制
iris %>% ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + 
  geom_boxplot() + 
  ggtext::geom_richtext(aes(x = Inf, y = Inf, 
                            label ='<p></p><p style = "color:red;">first line<span> </span></p> \n<span> </span> R^2 r<sub>1</sub>',
                            ),
                        hjust = 1,
                        vjust = 1,
                        color = 'black',
                        label.colour = 'blue',
                        fill = NA,
                        show.legend = FALSE
                        )

PS:推文都写完了才发现,这个boxplot画错了,一般情况下boxplot不会是x y双连续变量的,所以正常情况下的画法类似于下图,不过不影响本文的内容。

代码语言:javascript
代码运行次数:0
运行
复制
iris %>% ggplot(aes(x = Species, y = Sepal.Width, color = Species)) + 
  geom_boxplot()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模拟geom_text风格
  • ggtext的使用举例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档