【问题标题】:How to include unique grouping variables in plot titles and file names when using plotly?使用绘图时如何在绘图标题和文件名中包含唯一的分组变量?
【发布时间】:2020-05-20 23:56:46
【问题描述】:

我正在学习使用plotly。我有一个类似于下面创建的data 的数据集。使用下面的代码创建的 .html 图按我的意愿工作;为每个独特的ID 创建一个独特的“交互式”图。但是,我无法合并我的分组变量Group。我希望分组变量的名称包含在每个图的标题中,以及每个文件的名称中。例如,下面创建的图的标题将是"plot_for_ID_A"。我想让它说"plot_for_Alpha_A"Alpha 指的是分组变量。我在粘贴功能中尝试了多种方法,我尝试将filter(group==.y) 放在filter() 调用下,以便我可以在paste() 调用中引用.y,以及其他一些不起作用的方法。最好的方法是什么?

library(tidyverse)
library(plotly)

ID <- rep(c("A","B","C","D","E","F"), each=1000)
Group <- rep(c("alpha","beta"), each = 3000)
time <- rep(c(1:1000), times = 6)
one <- rnorm(6000)
two <- rnorm(6000)  
three <- rnorm(6000)
four <- rnorm(6000)
five<-rnorm(6000)
data <- data.frame(cbind(ID,Group,time,one,two,three,four,five),
                  stringsAsFactors = FALSE)

data_long <- data %>%
pivot_longer(-c(ID:time), names_to="Variable", values_to="Value")%>% 
  mutate(time = as.numeric(time),
         value = as.numeric(Value))


walk(unique(data_long$ID),
    ~ htmlwidgets::saveWidget(ggplotly(data_long %>% 
                                filter(ID == .x) %>% 
                                ggplot(aes(x = time, 
                                           y = value, 
                                           color = Variable)) +
                                geom_point() +
                                labs(title = paste(.x))),
                              paste("plot_for_ID_", .x, ".html", sep = "")))

此外,此代码的输出会为每个绘图创建一个唯一的 .html 文件。有没有办法将所有图粘贴到一个文件中,每个图都有自己的页面?

【问题讨论】:

    标签: r ggplot2 iteration plotly paste


    【解决方案1】:

    您可以使用group_split 根据组拆分数据并从其列值中获取图的名称。

    library(tidyverse)
    library(plotly)
    
    data_long %>%
      group_split(ID, Group) %>%
      map(~ htmlwidgets::saveWidget(ggplotly(
                                      ggplot(.x, aes(x = time, 
                                                     y = value, 
                                                  color = Variable)) +
                                       geom_point() +
                   labs(title = paste0("plot_for_", .x[[2]][1], "_", .x[[1]][1]))),
                   paste0("plot_for_", .x[[2]][1], "_", .x[[1]][1], ".html")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 2013-03-10
      相关资源
      最近更新 更多