尝试在ggplotly的标题中添加颜色编码

问题描述 投票:0回答:1

我正在尝试生成一个图表,其中标题具有颜色编码文本,以消除对图例的需要。我使用

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
功能。

r ggplot2 plotly ggplotly ggtext
1个回答
0
投票

您需要使用带有

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

© www.soinside.com 2019 - 2024. All rights reserved.