我需要幫助才能在 ggplot2 圖中為 geom_text 標簽的特定部分著色。
這是我用來生成示例的代碼:
library(ggrepel)
set.seed(42)
dat <- subset(mtcars, wt > 2.75 & wt < 3.45)
dat$car <- rownames(dat)
dat$colored_text <- "/A"
dat$car2 <- paste0(dat$colored_text,'-',dat$car)
p <- ggplot(dat, aes(wt, mpg, label = car2))
geom_point(color = "red")
p1 <- p geom_text() labs(title = "geom_text()")
這是p1的結果:

我想將每個/涂成綠色,將每個字母A涂成藍色,然后得到類似的結果:

有人有這樣做的想法嗎?
uj5u.com熱心網友回復:
實作您想要的結果的一種選擇是ggtext提供更多文本渲染可能性的包,geom_text并且允許通過 Markdown 和/或 HTML/CSS 設定文本樣式,如下所示:
library(ggplot2)
library(ggtext)
set.seed(42)
dat <- subset(mtcars, wt > 2.75 & wt < 3.45)
dat$car <- rownames(dat)
dat$colored_text <- "<span style='color: green'>/</span><span style='color: blue'>A</span>"
dat$car2 <- paste0(dat$colored_text,'-',dat$car)
ggplot(dat, aes(wt, mpg, label = car2))
geom_point(color = "red")
geom_richtext(fill = NA, label.colour = NA)
labs(title = "geom_richtext()")

編輯將ggrepel的作者建議的方法適應您的情況,您可以獲得所需的結果,ggrepel如下所示:
library(ggplot2)
library(ggrepel)
dat <- subset(mtcars, wt > 2.75 & wt < 3.45)
dat$car <- rownames(dat)
phantom <- function(x) {
paste0('phantom("', x, '")')
}
quotes <- function(x) {
paste0('"', x, '"')
}
dat$label_green <- paste(quotes("/"), phantom('A'), quotes("-"), phantom(dat$car), sep = " * ")
dat$label_blue <- paste(phantom('/'), quotes("A"), quotes("-"), phantom(dat$car), sep = " * ")
dat$label_black <- paste(phantom('/'), phantom('A'), quotes("-"), quotes(dat$car), sep = " * ")
ggplot(dat, aes(wt, mpg))
geom_point(color = "red")
geom_text_repel(aes(label = label_green), color = "green", parse = TRUE, seed = 1)
geom_text_repel(aes(label = label_blue), color = "blue", parse = TRUE, seed = 1)
geom_text_repel(aes(label = label_black), color = "black", parse = TRUE, seed = 1)
labs(title = "Multi-color geom_repel_text()")

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/358866.html
