我有一个facet_wrap() - 直方图对,显示两个直方图。其中一个因子水平是物种二项式,应该用斜体字表示,但另一个因子水平应该是正常文本:
library(tidyverse)
set.seed(1234)
data1 <- tibble(species = c(rep("H. sapiens",100), rep("Other Species",100)),
height = c(rnorm(100,174,25),rnorm(100,125,15)))
plt <- ggplot(data1) +
geom_histogram(aes(x=height,fill=species),bins=10) +
facet_wrap(~species,nrow = 2)
我尝试编写贴标机功能:
lbl <- function(variable, value) {
if(variable == "H. sapiens") value= italics("H. sapiens") else value
}
并在调用facet_wrap时使用它:
facet_wrap(~species,nrow = 2, labeller = lbl)
但是这用数字1和2替换了上一个facet标签,并产生了警告:
警告:贴标机API已更新。标签制作者使用
variable
和value
参数现已弃用。请参阅贴标签文档。
如何仅将斜体应用于出现H. sapiens的条带,并且仅应用于图例中的相应标签?我意识到这是两个不同的问题,但它们都出现在这里。
我看到this post,但似乎有未解决的问题(这是一个更复杂的例子而且非常令人困惑)。有解决方案吗?
答案 0 :(得分:1)
library(grid)
g <- ggplotGrob(plt)
g$grobs[[13]]$grobs[[1]]$children[[2]]$children[[1]]$gp$font <- 3L
attr(g$grobs[[13]]$grobs[[1]]$children[[2]]$children[[1]]$gp$font,"names") <- "italic"
grid.draw(g)
答案 1 :(得分:0)
您可以在数据中使用单独的“标签”列格式化为表达式,然后使用label_parse。
library(tidyverse)
library(stringr)
set.seed(1234)
data1 <- tibble(species = c(rep("H. sapiens",100), rep("Other Species",100)),
height = c(rnorm(100,174,25),rnorm(100,125,15)))
data1$labels <- ifelse(data1$species == "H. sapiens",
str_replace(paste0("italic(", data1$species, ")"), " ", "~"),
str_replace(data1$species, " ", "~"))
plt <- ggplot(data1) +
geom_histogram(aes(x=height,fill=species),bins=10) +
facet_wrap(~labels,nrow = 2, labeller = label_parsed)
plt