ggplot2主题元素中的Markdown合并两列以使用不同的字体制作一个刻度标签

问题描述

我正在尝试将此解决方https://github.com/wilkelab/ggtext应用于我的数据,以通过两列的组合创建刻度标签,并为每列应用不同的字体。我认为我已将示例代码调整为适合自己的情况,但在mutate阶段之后却收到此错误

check_breaks_labels(中断,标签)出错:找不到对象“名称

任何指针表示赞赏。

我正在寻找类似下面的内容

![Looking for something like the below.

这是我尝试过的代码

df$Colour <- as.factor(df$Colour)
df$Number <- as.factor(df$Number)
df$Family <- factor(df$Family,levels = c("Ardeidae"))

df %>% mutate(
  name = glue("<i style={Comname} ({Sciname}</i>)"))%>%

ggplot(df[df$Value != 0,],aes(x=Sample,y=Number)) +
  geom_point(aes(size=Value,alpha = 0.9)) +
  scale_y_discrete(labels= name) +
  facet_grid(Family ~ Year,scales = "free",space = "free") 

还有一些示例数据。

df <- structure(list(Year = c("1984 - 1989","2017 - 2020","1984 - 1989","2017 - 2020"),Sample = c("Developed_zone_1992","Developed_zone_2020","Paddock_zone_1992","Paddock_zone_2020","Sanctuary_zone_1992","Sanctuary_zone_2020","Developed_zone_1992","Sanctuary_zone_2020"),Colour = structure(c(1L,1L,2L,3L,3L),.Label = c("1","2","3"),class = "factor"),Value = c(0L,0L,10L,5L,5L),Family = structure(c(1L,1L),.Label = "Ardeidae",Comname = c("47. Little egret","47. Little egret","46. Western great egret","45. Purple heron","44. Grey heron","44. Grey heron"),Sciname = c("Egretta garzetta","Egretta garzetta","Ardea alba","Ardea purpurea","Ardea cinerea","Ardea cinerea"),Number = structure(c(1L,4L,4L),.Label = c("96","97","98","99"),class = "factor")),row.names = c(NA,-24L),class = "data.frame")

enter image description here

Update

解决方法

@Duck已经指出,您的代码中存在一些小问题。不幸的是,这些无法解决ggtext问题

  1. 当您想使用ggtext时,必须通过设置例如element_markdown来使用。 axis.text.y = element_markdown()内的theme()

  2. 要使样式生效,您必须使用HTML实体.使Comname中的点&#46;转义。 (原因是数字后跟.标记了markdown中有序列表的开始。)

  3. 这些更改之后,您不需要scale_y_discreteggplot2默认情况下将使用name标记刻度线

df$Colour <- as.factor(df$Colour)
df$Number <- as.factor(df$Number)
df$Family <- factor(df$Family,levels = c("Ardeidae"))

library(dplyr)
library(glue)
library(ggplot2)
library(ggtext)

df1 <- df %>%
  mutate(
    Comname = stringr::str_replace(Comname,"\\.","&#46;"),name = glue::glue("{Comname} <i>{Sciname}</i>")
  ) %>%
  filter(Value != 0) 

df1 %>% 
  ggplot(aes(x = Sample,y = name)) +
  geom_point(aes(size = Value,alpha = 0.9)) +
  facet_grid(Family ~ Year,scales = "free",space = "free") +
  theme(axis.text.y = element_markdown())