在 R 中的 ggplot2 文本中添加颜色

ggplot2软件包功能强大,几乎可以无限制地进行自定义,但是有时进行一些细微调整可能是一个挑战。 ggtext软件包旨在简化可视化文件中的样式文本。 在本教程中,我将完成上个月在RStudio Conference上演示的一个文本样式任务:添加颜色。

如果您想继续,我建议从GitHub安装ggp​​lot2的开发版本。 通常,会议上显示的某些内容尚未在CRAN上。 ggtext绝对不适用于ggplot的某些旧版本。

必须从GitHub安装ggtext,因为在我撰写本文时,该软件包尚未在CRAN上。 我使用remotes::install_github()从GitHub安装R软件包,尽管其他几个选项(例如devtools::install_github()工作。 请注意,在下面的代码中,我包含了参数build_vignettes = TRUE因此我具有软件包vignettes的本地版本。 之后,我加载ggplot2,ggtext和dplyr。

remotes::install_github("tidyverse/ggplot2", build_vignettes = TRUE)
remotes::install_github("wilkelab/ggtext", build_vignettes = TRUE)
library(ggplot2)
library(ggtext)
library(dplyr)

对于演示数据,我将使用将R的相关推文(带有#rstats主题标签)与Python的相关推文(#python)进行比较的数据。 下载最近的推文后,我进行了一些过滤,随机抽取了每个推文的1,000个样本,然后计算出每个组中至少有5个赞,有至少5个推文,包含URL并包含诸如照片或视频。

您可以使用下面的代码块重新创建数据集。 或者,您可以将任何有意义的数据集用作分组的条形图,并相应地修改我的后续图形代码。

Hashtag <- c("#python", "#python", "#python", "#python", "#rstats", "#rstats", "#rstats", "#rstats")
Category <- c("FiveLikes", "FiveRTs", "HasURL", "HasMedia", "FiveLikes", "FiveRTs", "HasURL", "HasMedia") 
NumTweets <- c(179, 74, 604, 288, 428, 173, 592, 293)
graph_data <- data.frame(Hashtag, Category, NumTweets, stringsAsFactors = FALSE)

graph_data数据帧采用“长”格式:一列用于标签(#rstats或#python),一列用于我正在测量的类别,一列用于值。

str(graph_data)
'data.frame':	8 obs. of  3 variables:
 $ Hashtag  : chr  "#python" "#python" "#python" "#python" ...
 $ Category : chr  "FiveLikes" "FiveRTs" "HasURL" "HasMedia" ...
 $ NumTweets: num  179 74 604 288 428 173 592 293

通常,这是大多数ggplot图所需的结构。

接下来,我将创建一个分组的条形图并将其保存到变量my_chart

my_chart <- ggplot(graph_data, aes(x=Category, y=NumTweets, fill= Hashtag)) + 
  geom_col(position="dodge", alpha = 0.9) +
  theme_minimal() +
  xlab("") +
  ylab("") +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "grey")) +
  scale_fill_manual(values = c("#ff8c00", "#346299"))

第二行的alpha = 0.9只是使条形稍微透明( alpha = 1.0是完全不透明的)。 最后几行自定义图形的外观:使用最小的主题,摆脱x和y轴标签,删除默认的网格线以及为条形设置颜色。 如果运行代码然后显示my_chart ,则图形应如下my_chart

在 R 中的 ggplot2 文本中添加颜色_第1张图片使用ggplot2创建的堆叠条形图。

接下来,我将使用以下代码添加标题:

my_chart + 
  labs(title = "#python and #rstats: Comparing 1,000 random tweets")

在 R 中的 ggplot2 文本中添加颜色_第2张图片与标题分组的条形图。

它看起来 。 。 。 好。 但是在单独的RStudio会议上, 图形的魅力 ,威尔·蔡斯(Will Chase)告诉我们,传说并不理想(尽管他用更加丰富多彩的语言表达了这一观点)。 他表明,在图形标题中直接添加颜色可以改善图形效果。 我们可以使用ggtext包轻松地做到这一点。

知道一点内联CSS的HTML样式肯定会帮助您自定义文本。 在下面的代码中,我正在使用span标记来分割要影响的文本部分— #python和#rstats。 在每组span标签中,我都设置了一种样式-特别是带有color:文本color:然后设置了我想要的颜色的十六进制值。 除十六进制值外,您还可以使用可用的颜色名称

my_chart +
  labs(
    title = "#python and 
    #rstats: Comparing 1,000 random tweets"
  ) +
  theme(
    plot.title = element_markdown()
  )

请注意,用ggtext样式化文本有两个部分。 除了将样式添加到标题或其他文本之外,我还需要向具有颜色的任何plot元素添加element_markdown() 。 我在上面的代码中使用plot.title = element_markdown()theme()函数中plot.title = element_markdown()

如果您运行所有代码直到现在,该图应如下所示:

在 R 中的 ggplot2 文本中添加颜色_第3张图片ggplot2图,标题文本中带有颜色。

不过,我发现很难看到此标题文本中的颜色。 让我们添加标记以使文本变为粗体,并且还添加legend.position = none来删除图例:

my_chart +
  labs(
    title = "#python and 
    #rstats: Comparing 1,000 random tweets"
  ) +
  theme(
   plot.title = element_markdown(), legend.position = "none"
  )

在 R 中的 ggplot2 文本中添加颜色_第4张图片带有粗体和彩色标题文本的图形,并删除了图例。

如果要更改x轴文本的颜色,则需要将包含该信息的数据添加到我正在可视化的数据框中。 在下一个代码块中,我创建一列,将粗斜体红色添加到FiveLikes和FiveRTs类别标签,并将其余的样式设置为粗斜体而不添加红色。 我还增加了仅用于FiveLikes和FiveRTs的字体大小。 (我不会在真实的图形上执行此操作;我在此处执行此操作只是为了更轻松地查看两者之间的差异。)

graph_data <- graph_data %>%
  mutate(
    category_with_color = ifelse(Category %in% c("FiveLikes", "FiveRTs"), 
    glue::glue("{Category}"), 
    glue::glue("{Category}"))
  )

接下来,我需要重新创建图表以使用更新的数据框。 新的图表代码与以前基本相同,但有两个更改:我的x轴现在是新的category_with_color列。 而且,我在theme()函数内的axis.text.x添加了element_markdown()

ggplot(graph_data, aes(x=category_with_color, y=NumTweets, fill= Hashtag)) + 
  geom_col(position="dodge", alpha = 0.9) +
  theme_minimal() +
  xlab("") +
  ylab("") +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "grey")) +
  scale_fill_manual(values = c("#ff8c00", "#346299")) + 
  labs(
    title = "#python and #rstats: Comparing 1,000 random tweets"
  ) +
  theme(
    plot.title = element_markdown(), legend.position = "none",
    axis.text.x = element_markdown() # Added element_markdown() to axis.text.x in theme
  ) 

该图现在看起来像这样,x轴上的前两个项目为红色:

在 R 中的 ggplot2 文本中添加颜色_第5张图片具有程式化的x轴文字的图形。

ggtext还可以做更多的事情,例如创建样式化的文本框并将图像添加到轴。 但是包裹作者克劳斯·威尔克在会议上警告我们不要太疯狂。 ggtext软件包不支持R Markdown文档可用的所有格式命令。 您可以在ggtext网站上查看最新信息

有关R的更多技巧,请访问https://bit.ly/domorewithR上的“用R进行更多操作” 页面或IDG TECHtalk YouTube频道上的“ 用R进行更多操作”播放列表 。

From: https://www.infoworld.com/article/3527449/add-color-to-your-ggplot2-text-in-r.html

你可能感兴趣的:(在 R 中的 ggplot2 文本中添加颜色)