Я хочу сделать часть своих надписей-легенд (которые хранятся в отдельном data.frame). Этот вопрос связан, но он проще моего случая:
library(tidyverse)
df <- data.frame(xx = c(0, 3),
yy = c(0, 1))
df_text <- data.frame(start = c(0, 1, 2),
end = c(1, 2, 3),
heading_bold = c("title 1", "title 2", "title 3"),
normal_text = c("i want this to be normal text title 1",
"i want this to be normal text title 2",
"i want this to be normal text title 3")) %>%
mutate(merged_text = paste0(heading_bold, ": ", normal_text)) #%>%
# perhaps I should try and make bold here?
#mutate(merged_text = paste0("bold(", heading_bold, ")", ": ", normal_text))
ggplot(df, aes(x = xx, y = yy)) +
geom_rect(data = df_text,
aes(xmin = start,
xmax = end,
fill = merged_text,
ymin = 0,
ymax = 1),
inherit.aes = FALSE) +
scale_fill_viridis_d(option = "A", name = "Legend", limits = unique(df_text$merged_text), direction = -1)
Я хочу, чтобы title 1, title 2 и title 3 были выделены жирным шрифтом в легенде.
Как я предложил выше в закомментированном коде, одним из возможных способов сделать это может быть обертывание текста в функцию bold:
mutate(merged_text = paste0("bold(", heading_bold, ")", ": ", normal_text))
но я не знаю, как назвать это выражение дальше.
Есть идеи?
Спасибо





Используя ggtext, вы можете применить уценку к меткам легенд. В этом примере я обрамляю заголовки при объединении merged_text с ** и применяю element_markdown() к теме сюжета.
library(tidyverse)
library(ggtext)
df <- data.frame(xx = c(0, 3),
yy = c(0, 1))
df_text <- data.frame(start = c(0, 1, 2),
end = c(1, 2, 3),
heading_bold = c("title 1", "title 2", "title 3"),
normal_text = c("i want this to be normal text title 1",
"i want this to be normal text title 2",
"i want this to be normal text title 3")) %>%
mutate(merged_text = paste0("**",heading_bold,"**: ", normal_text))
ggplot(df, aes(x = xx, y = yy)) +
geom_rect(data = df_text,
aes(xmin = start,
xmax = end,
fill = merged_text,
ymin = 0,
ymax = 1),
inherit.aes = FALSE) +
scale_fill_viridis_d(option = "A", name = "Legend", limits = unique(df_text$merged_text), direction = -1) +
theme(legend.text = element_markdown())

Created on 2024-06-14 with reprex v2.1.0
спасибо, но я не хочу вручную ставить ** вокруг каждого heading_bold, у меня много названий
mutate(heading_bold = paste0("**", heading_bold, "**")) кажется, не работает?
Я отредактировал этот ответ, добавив отметки ** там, где создается merged_text. Это лучше адаптируется к реальным данным?
хм, заголовки остаются нежирными, когда я запускаю ваш код, какую версию ggtext вы используете?
ggtext 0.1.2 и ggplot2 3.5.1странно, на тех же версиях все еще не работает, но на другом компьютере работает, так что разберемся!
Просто посмотрел на связанный пост из вопроса и понял, что фактически продублировал ответ. Может, просто удалить это?