如果尝试以编程方式设置轴标签的字体,一个过程在没有刻面的情况下工作,但在刻面存在时中断。例如
library(tidyverse)
library(magrittr)
data("mtcars")
mtcars %<>%
rownames_to_column %>%
mutate(
rowname = rowname %>%
fct_reorder(mpg)
)
p1 <- mtcars %>%
ggplot(
aes(mpg, rowname)
) +
geom_point() +
theme(
axis.text.y = element_text(
face = c("plain", "bold") %>%
rep(c(30, 2))
)
)
p1
退货
但是如果我添加刻面,这种简单粗体的 y 轴标签模式就会丢失
p1 +
facet_grid(
cyl ~ .,
scales = "free_y",
space = "free_y"
)
怎么在
facet_grid
的情况下给一些标签加气?
最佳答案
这是一种解决方法,但在您的情况下实现它应该没有问题。我玩弄了一下,并在数据集中创建了一个实际的 fontface 变量并使用数字而不是 c("plain", "bold")
获得了更好的运气。 .
library(tidyverse)
library(magrittr)
data("mtcars")
mtcars %<>%
rownames_to_column %>%
mutate(
rowname = rowname %>%
fct_reorder(mpg)
)
mtcars$font_face <- rep(c(1,2,3,4))
p1 <- mtcars %>%
ggplot(aes(mpg, rowname)) +
geom_point() +
theme(axis.text.y = element_text(face = mtcars$font_face)) +
facet_grid(cyl ~ .,
scales = "free_y",
space = "free_y")
p1
可以看到,四个面的位置分别是italic=1、bold=2、plain=3、bold.italic=4。
因此,要重新创建您所展示的示例,您只需要在原始数据管道中生成一个变量并使用任何相关方法对其进行分配。要明确地重新创建您的示例,我将使用以下代码,但我假设您需要制定一个实际适合您的用例的 dplyr 解决方案。
mtcars$font_face <- ifelse(mtcars$rowname %in% c("Toyota Corolla", "Fiat 128"), 2, 3)
编辑:
最终的解决方案目前不起作用(
ifelse
行)。它识别 else
值和选择 1:4
成功更改了应用于标签的效果,但它没有选择更改 if
的标签值,尽管事实是 mtcars$font_face
变量确实采用这些值。我现在被卡住了,因为我不明白为什么它以前为我运行,但不是在新的 session 中运行。我仍在努力弄清楚自己,但也许我的开始可以帮助某人进入下一步。
关于r - 以编程方式在 ggplot 中使用 facets 设置轴面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394453/