如何使用 ggtext 为 r 中的轴数据标签着色?

问题描述

我遇到了使用 ggtexthttps://wilkelab.org/ggtext/ 到颜色轴数据标签element_markdown() 包,并尝试为我的轴标签着色但失败了。

代码(不含 ggtext)

library(tidyverse)

read.csv("https://raw.githubusercontent.com/johnsNow09/covid19-df_stack-code/main/df_stack_limited.csv") %>% 
  
  ggplot(aes(x = Cases_type,y = Country.Region)) +
  geom_point(shape = 21,aes(size = Cases_size,color = Cases_type),fill="#f8f2e4",stroke=3) +
  # theme_minimal() +
  theme_wsj() +
  theme(axis.text.x = element_text(angle = 90),axis.text = element_text(size = 8),legend.position = "none",plot.title = element_text(face = "bold",family = "serif",size = 20),plot.subtitle = element_text(face = "plain",size = 12),plot.caption = element_text(face = "plain",size = 9)) +

  scale_color_tableau(palette = "Tableau 10") +
  # scale_color_wsj(palette = "colors6") +
  
  facet_wrap(~Date) +
  labs(title = "Top 5 Countries for all type of Daily cases",subtitle = "For Latest 7 days separated by each date",caption = "created by ViSa (SciArt!!)") +
  coord_cartesian(clip = "off")

enter image description here

现在,如果我添加 ggtext 来为 x-axis 数据标签着色,则会出现错误

library(tidyverse)
library(ggtext)

color = c("#2596be","#f28e2b","#e15759")

read.csv("https://raw.githubusercontent.com/johnsNow09/covid19-df_stack-code/main/df_stack_limited.csv") %>% 
  
  mutate(Cases_type = glue("<i style='color:{color}>{Cases_type}</i>'")) %>% 
  
  ggplot(aes(x = Cases_type,size = 9)) +
  
  theme(axis.text.x = element_markdown()) +
  scale_color_tableau(palette = "Tableau 10") +
  # scale_color_wsj(palette = "colors6") +
  
  facet_wrap(~Date) +
  labs(title = "Top 5 Countries for all type of Daily cases",caption = "created by ViSa (SciArt!!)") +
  coord_cartesian(clip = "off")

解决方法

我认为你需要改变

"<i style='color:{color}>{Cases_type}</i>'"

"<i style='color:{color}'>{Cases_type}</i>"
,

问题是您试图用长度为 105 的向量 gluecolor 长度为 3 的 Cases_type 向量。而是将 color 设为命名向量并使用 color[Cases_type] 以确保您分配正确的颜色。此外,您的 glue 语句中缺少引号。

library(tidyverse)
library(ggtext)
library(glue)
library(ggthemes)

color = c(Daily_cases = "#2596be",Daily_deaths = "#f28e2b",Daily_recovered = "#e15759")

d <- read.csv("https://raw.githubusercontent.com/johnsnow09/covid19-df_stack-code/main/df_stack_limited.csv") %>% 
  mutate(Cases_type = glue("<i style='color: {color[Cases_type]}'>{Cases_type}</i>'")) 

d %>% 
  ggplot(aes(x = Cases_type,y = Country.Region)) +
  geom_point(shape = 21,aes(size = Cases_size,color = Cases_type),fill="#f8f2e4",stroke=3) +
  #theme_minimal() +
  theme_wsj() +
  theme(axis.text.x = element_text(angle = 90),axis.text = element_text(size = 8),legend.position = "none",plot.title = element_text(face = "bold",family = "serif",size = 20),plot.subtitle = element_text(face = "plain",size = 12),plot.caption = element_text(face = "plain",size = 9)) +
  theme(axis.text.x = element_markdown()) +
  scale_color_tableau(palette = "Tableau 10") +
  # scale_color_wsj(palette = "colors6") +
  facet_wrap(~Date) +
  labs(title = "Top 5 Countries for all type of Daily cases",subtitle = "For Latest 7 days separated by each date",caption = "created by ViSa (SciArt!!)") +
  coord_cartesian(clip = "off")