通过自定义模式栏按钮从绘图图中下载数据,用R编码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过自定义模式栏按钮从绘图图中下载数据,用R编码相关的知识,希望对你有一定的参考价值。

我有一个绘图图(在我的情况下是用R / rmarkdown制作的,并且想要下载数据。

  • 选项1是图形外的下载按钮,用于下载到数据对象(例如CSV或表格)。例如Download output filecsv或this。它有效,但不是那么整洁-使用自定义模式栏会更整洁。

选项2和3使用自定义模式栏按钮。plotly book - custom modebar button有一个很好的示例,其中包含创建自定义按钮的代码。

  • 选项2,是作为自定义模式栏按钮的下载按钮(例如,到csv)。大概可以用javascript(或html)完成并通过,类似于下面选项3中的示例吗?有关如何执行此操作的建议?在Plotly forum上使用Dash(?)对此选项进行了一些讨论,但这已经超出了我的薪水等级。

  • 选项3是一个链接到表(可能是带有数据表对象的附录或其他网站)的按钮,其中该数据表具有下载按钮。最后一部分,为您可以单击的数据表创建按钮很容易(请参见here)。网站链接的javascript代码应类似于以下(javascript link to website)。单击时,plotly模式栏中的默认Plotly按钮确实会将您发送到链接的网站,但不确定如何从R复制该html / javascript。

我在这段代码中缺少一些简单的东西吗?

#devtools::install_github('cpsievert/plotly_book') #for octocat image
library(tidyverse)
library(DT)
library(plotly)

data(octocat_svg_path, package = "plotlyBook")

octocat <- list(
    name = "octocat",
    icon = list(
      path = octocat_svg_path,
      transform = 'matrix(1 0 0 1 -2 -2) scale(0.7)'
    ),
    click = htmlwidgets::JS(
      "function(gd) {window.location.href = 'http://www.google.com';
    }"
    )
  )
plot_ly() %>%
    config(modeBarButtonsToAdd = list(octocat))
答案

使用onRender中的htmlwidgets,您可以添加JS事件处理程序。这将把单击的数据系列打印到一个窗口。

https://plotly-r.com/js-event-handlers.html

这里是Rmd文件中的示例。在RStudio中打开它,然后单击[编织到HTML],然后单击[在浏览器中打开]。当您单击数据系列之一时,将打开一个新窗口,其中包含csv格式的数据。

---
title: "Export Plotly Data"
output: html_document
---

```{r echo = FALSE, message = FALSE}
library(plotly)
library(htmlwidgets)

plot_ly() %>%
    add_markers(x = c(0, 1), y = c(2, 3)) %>%
    add_markers(x = c(4, 5), y = c(6, 7)) %>%
    onRender("
    function(el) {
      el.on('plotly_click', function(d) {
        var newWindow = window.open();
        newWindow.document.write('x,', d.points[0].data.x, '<br>y,', d.points[0].data.y);
      });
    }
  ")

以上是关于通过自定义模式栏按钮从绘图图中下载数据,用R编码的主要内容,如果未能解决你的问题,请参考以下文章

使用绘图子图时绘制自定义误差线

如何在R的图中自定义x轴? [重复]

R Shiny:如何从数据表中的自定义按钮调用 JavaScript 函数

输入用户数据时如何更新 Matplotlib 中的绘图(通过 PyQt5 按钮)

R Shiny:备用表格数据和绘图可视化

在 Swift 中自定义栏按钮项