1

我正在尝试将此解决方案https://github.com/wilkelab/ggtext应用于我的数据,以从两列的组合创建刻度标签,并对每列应用不同的字体。我想我已经根据我的场景调整了示例代码,但是在 mutate 阶段之后出现了这个错误:

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

任何指针表示赞赏。

我正在寻找类似下面的东西。

![寻找类似下面的东西。

这是我尝试过的代码:

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

在此处输入图像描述

更新

4

1 回答 1

1

正如@Duck 已经指出的那样,您的代码中有一些小问题。不幸的是,这些并不能解决ggtext问题

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

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

  3. 在这些更改之后,您不需要scale_y_discrete. ggplot2默认情况下将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())

于 2020-09-08T15:26:23.560 回答