geom_text ggplot2 图形中的多种颜色
Mulitple color in geom_text ggplot2 figure
我需要帮助才能为 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 涂上蓝色,得到类似的东西:
有人有想法吗?
实现您想要的结果的一个选项是 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()")
EDIT 根据您的情况调整 the approach suggested by the author of 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()")
我需要帮助才能为 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 涂上蓝色,得到类似的东西:
有人有想法吗?
实现您想要的结果的一个选项是 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()")
EDIT 根据您的情况调整 the approach suggested by the author of 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()")