我正在尝试生成一个图表,其中标题具有颜色编码文本,以消除对图例的需要。我使用
ggplot2
包和 ggtext
在 ggtext::element_markdown()
中执行此操作没有问题。
然而,当我尝试在上面分层时ggplotly
,颜色消失了。
我想知道是否有任何方法可以将颜色功能与
ggplotly
结合起来?
这是使用
mtcars
数据集的可重现示例。
library(ggplot2)
library(dplyr)
library(plotly)
library(ggtext)
mtcolors<-c("springgreen4", "darkorange3", "purple")
names(mtcolors)<-c("4 cyl", "6 cyl", "8 cyl")
mt_title_text <- glue::glue(
'MPG vs HP -',
'<span style = "color:{mtcolors["4 cyl"]}">**4 cyl**</span>',
'vs.',
'<span style = "color:{mtcolors["6 cyl"]}">**6 cyl**</span>',
'vs.',
'<span style = "color:{mtcolors["8 cyl"]}">**8 cyl**</span>',
.sep = ' '
)
mtcars |>
mutate(
cyl = as.factor(cyl)
) |>
ggplot(aes(x=mpg, y=hp, color=cyl)) +
geom_point(size=3) +
theme_bw() +
scale_color_manual(values=c("springgreen4", "darkorange3", "purple")) +
labs(
title = mt_title_text
) +
theme(
plot.title = ggtext::element_markdown(),
panel.grid.minor = element_blank(),
legend.position = 'none'
)
这会产生以下图表:
但是,当我添加 ggplotly 来添加交互功能时,标题中的 Markdown 文本返回到普通文本:
mtcarsexp<-
mtcars |>
mutate(
cyl = as.factor(cyl)
) |>
ggplot(aes(x=mpg, y=hp, color=cyl)) +
geom_point(size=3) +
theme_bw() +
scale_color_manual(values=c("springgreen4", "darkorange3", "purple")) +
labs(
title = mt_title_text
) +
theme(
plot.title = ggtext::element_markdown(),
panel.grid.minor = element_blank(),
legend.position = 'none'
)
ggplotly(mtcarsexp)
看来也许我可以在这个问题中使用这个概念,而不是在
labs
中使用标题,只需创建文本,并将其放置在标题的位置,但我更喜欢使用原生 labs
功能。
您需要使用带有
ggplotly
的 html 标签。此外,颜色名称必须是标准颜色或十六进制代码。
library(ggplot2)
library(dplyr)
library(plotly)
mtcolors<-c("#00FF7F", "darkorange", "purple")
names(mtcolors)<-c("4 cyl", "6 cyl", "8 cyl")
mt_title_text <- glue::glue(
'MPG vs HP -',
'<b style= "color:{mtcolors["4 cyl"]}">4 cyl</b>',
'vs.',
'<b style= "color:{mtcolors["6 cyl"]}">6 cyl</b>',
'vs.',
'<b style= "color:{mtcolors["8 cyl"]}">8 cyl</b>',
.sep = ' ')
mtcars %>%
mutate(
cyl = as.factor(cyl)
) %>%
ggplot(aes(x=mpg, y=hp, color=cyl)) +
geom_point(size=3) +
theme_bw() +
scale_color_manual(values=c("springgreen4", "darkorange3", "purple")) +
labs(
title = mt_title_text
) +
theme(
panel.grid.minor = element_blank(),
legend.position = 'none'
) -> p
ggplotly(p)
创建于 2024-03-11,使用 reprex v2.0.2