在折线图的特定位置添加点或点,并使用 ggplotly() 相应地调整工具提示

Posted

技术标签:

【中文标题】在折线图的特定位置添加点或点,并使用 ggplotly() 相应地调整工具提示【英文标题】:Add points or dots in specific positions of a line chart and adapt the tooltip accordingly with ggplotly() 【发布时间】:2021-09-10 19:39:06 【问题描述】:

我在下面创建了总数据框:

# Dummy data
data <- data.frame(
  int_end = as.Date("2017-06-14") - 0:364,
  users = runif(365) + seq(-140, 224)^2 / 10000,
  user_type=sample(c('active', 'inactive'), 365, replace = TRUE)
)

data2 <- data.frame(
  int_end = as.Date("2017-06-12") - 0:12,
  MP =sample(c('P', 'M'), 13, replace = TRUE),
  DESCRIPTION=sample(c('text1', 'text2','text3'), 13, replace = TRUE)
  
)
# merge two data frames by ID
total <- merge(data,data2,by="int_end",all = TRUE)

我用ggplotly() 创建了一个折线图。我想要实现的是在MPDESCRIPTION 列中有数据的折线图中添加点或点或气泡。除了其他列之外,这些点的工具提示还应包括MPDESCRIPTION。在其余点中,MPDESCRIPTION 理想情况下根本不应该显示在工具提示中,或者至少应该像 NAs,例如 DESCRIPTION:NA

library(plotly)
plot <- total %>%
  ggplot(aes(int_end, users, color = user_type)) +
  geom_line() +
  theme_bw() +
  #theme(legend.position = "none")+
  theme(legend.position = 'top')+
  labs(title = glue::glue("Number of Users over time."),
       subtitle = glue::glue("Interval window of days."),
       y = "", x = "")
ggplotly(plot)

【问题讨论】:

【参考方案1】:

这可以这样实现:

    对于点,您可以添加一个geom_point 层,您可以在该层中传递一个过滤数据集,其中仅包含非缺失MPDESCRIPTION 的观察值 条件工具提示可以通过text aes 实现。为方便起见,我通过单独的函数创建工具提示文本,并将工具提示文本作为新列添加到您的数据集中。
# merge two data frames by ID
total <- merge(data,data2,by="int_end",all = TRUE)

tooltip_text <- function(int_end, users, user_type, MP, DESCRIPTION) 
  text <- glue::glue("int_end: int_end", "<br>",
                     "users: users", "<br>",
                     "user_type: user_type")
  
  text <- ifelse(!is.na(MP), glue::glue("text<br>MP: MP"), text)
  text <- ifelse(!is.na(DESCRIPTION), glue::glue("text<br>DESCRIPTION: DESCRIPTION"), text)
  
  text

library(plotly)
library(dplyr)

total <- mutate(total, text = tooltip_text(int_end, users, user_type, MP, DESCRIPTION))

plot <- total %>%
  ggplot(aes(int_end, users, color = user_type, group = user_type,
             text = text)) +
  geom_line() +
  geom_point(data = filter(total, !is.na(MP) | !is.na(DESCRIPTION))) +
  theme_bw() +
  theme(legend.position = 'top')+
  labs(title = glue::glue("Number of Users over time."),
       subtitle = glue::glue("Interval window of days."),
       y = "", x = "")
ggplotly(plot, tooltip = "text")

【讨论】:

***.com/questions/68167060/… 请根据您的回答进行检查。如果存在但没有线条,则仅显示点

以上是关于在折线图的特定位置添加点或点,并使用 ggplotly() 相应地调整工具提示的主要内容,如果未能解决你的问题,请参考以下文章

R - ggplot2 Legend没有出现在折线图上[重复]

在折线图/面积图的左右两侧添加填充

Python使用matplotlib函数subplot可视化多个不同颜色的折线图在折线图上为每个数据点添加数值标签

Python使用matplotlib函数subplot可视化多个不同颜色的折线图在折线图上为每个数据点添加日期数据标签

SSRS如何在折线图上为我的x轴添加日期范围?

如何使用 plotly express 向折线图添加点或标记?