问题描述
我正在尝试将此解决方案https://github.com/wilkelab/ggtext应用于我的数据,以通过两列的组合创建刻度标签,并为每列应用不同的字体。我认为我已将示例代码调整为适合自己的情况,但在mutate阶段之后却收到此错误:
任何指针表示赞赏。
我正在寻找类似下面的内容。
这是我尝试过的代码:
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")
解决方法
@Duck已经指出,您的代码中存在一些小问题。不幸的是,这些无法解决ggtext
问题
-
当您想使用
ggtext
时,必须通过设置例如element_markdown
来使用。axis.text.y = element_markdown()
内的theme()
。 -
要使样式生效,您必须使用HTML实体
.
使Comname中的点.
转义。 (原因是数字后跟.
标记了markdown中有序列表的开始。) -
这些更改之后,您不需要
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,"\\.","."),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())