我正在try 制作一个图表,其中的标题有 colored颜色 编码的文本,以消除对图例的需要.我可以使用ggtextggtext::element_markdown()ggplot2中做到这一点. 然而,当我试图在上面ggplotly层时, colored颜色 消失了.

我想知道有没有什么方法可以把 colored颜色 功能和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'
  ) 

这将生成以下图表:

enter image description here

然而,当我添加ggploly以添加交互功能时,标题中的标记文本返回到普通文本:

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)

enter image description here

似乎我可以在this question中使用这个概念,而不是在labs中使用标题,只需创建文本,并将其放置在标题的位置,但我更喜欢使用原生的labs功能.

推荐答案

您需要使用包含ggplotly的html标记.此外, colored颜色 需要是标准 colored颜色 或十六进制代码.

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

R相关问答推荐

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

使用tidyverse / Mutate的存款账户余额

如何使用tryCatch执行语句并忽略警告?

识别连接的子网(R-igraph)

按时间顺序对不同事件进行分组

KM估计的差异:SvyKm与带权重的调查

在另一个包中设置断点&S R函数

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

为什么在写入CSV文件时Purrr::Pwalk不起作用

R -基线图-图形周围的阴影区域

循环遍历多个变量,并将每个变量插入函数R

删除在R中的write.table()函数期间创建的附加行

以任意顺序提取具有多个可能匹配项的组匹配项

如何在AER::ivreg中指定仪器?

将CSV转换为R中的自定义JSON格式

如何在R中的两列以上使用联合(&U)?

希望解析和复制R中特定模式的数据

无法保存gglot的所有pdf元素

根据用户输入更改标记大小和 colored颜色 (R)

如何根据顺序/序列从数据框中排除值