我需要创建一个多面板图,其中y轴(因子)的刻度标签在某些面板上为斜体,在其他面板上为普通文本。
以下是一个可复制的示例,使用虚构数据,展示了我尝试过的一件事:
library(ggplot2)
## Example data
df <- data.frame(var = c("Grass cover", "River depth", "Canis familiaris", "Canis lupus", "Canis latrans"),
coef = c(0.6, 0.4, 0.8, 0.1, 0.5),
se = c(0.3, 0.4, 0.4, 0.05, 0.2),
panel = c(rep("Environment", 2), rep("Canid abundance", 3)))
## multi-panel plot
ggplot(df, aes(y = var, x = coef, xmin = coef - se, xmax = coef + se)) +
geom_pointrange() +
facet_wrap(~ panel, scales = "free_y", ncol = 1) +
labs(y = NULL) +
theme(axis.text.y = element_text(face = c(rep("plain", 2), rep("italic", 3))))
注意,只有顶部面板中的 "Canis lupus" 是斜体的。期望的图形应该有第一个面板中所有的科学名称(y轴标签)都是斜体,但底部面板的标签应该是普通字体。在真实数据中,我有4个面板,其中2个需要斜体。
似乎 element_text()
中向量化的 face
参数在面板之间被循环使用。我也尝试过 axis.text.y = element_text(face = rep("italic", 3), c(rep("plain", 2)))
,这会导致所有5个y轴标签都是斜体。
如果可能的话,我希望不使用多个ggplot对象(例如grid_arrange()
或cowplot()
)。不过,我愿意接受任何允许调整所有视觉格式元素的解决方案。
我认为可以使用expression()
来解决问题,但我还没有想出方法。
ggplot2
中找到所需的内容,可以考虑使用ggtree
(github)包,该包支持标签和其他内容中的Markdown。 - r2evans