plotly:在存储的JSON字符串中公开 "config "对象,以便于Plotly.JS函数的使用。

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

我不知道这是一个剧情问题,还是一个...... htmlwidgets 问题。也许两者都有。

我正在使用R制作plotly小组件,如果用R制作,也是htmlwidgets。以这种方式制作plotly部件时,生成的HTML包含一个字符串化的JSON对象,其中包括数据和部件的一些设置。但只有这个JSON对象的某些部分可以从Javascript控制台轻松访问。例如,"data "和 "layout "对象很容易被访问,但 "config "对象却不容易被访问。为什么会这样--是否可以用其他方式轻松访问 "config "对象?

下面是一个例子,从创建Plotly小组件的R代码开始。

  library(plotly)
  data(iris)
  myPlot <- plot_ly(
      x     = ~Petal.Length, y = ~Petal.Width, 
      color = ~Species,
      data  = iris)
  myPlot$elementId <- "myExample"  
  myPlot

这段代码产生了一个显示plotly小组件的HTML页面。该页面包含一个 <script type="application/json" data-for="myExample"> 容器,而这个容器又包含一个字符串化的JSON对象。考虑到上面的代码,JSON对象的结构是这样的。

{
VALID (RFC 8259)
Formatted JSON Data
{
  "x":{
    "attrs":{},
    "layout":{},
    "config":{
      "showSendToCloud":false
    },
    "data":[],
    "highlight":{},
  },
  "evals":[],
  "jsHooks":[]
}

(为简洁起见,我省略了一些对象,在 x. 我还隐藏了大多数对象的内容,例如。attrslayout 并不是真的空的。)

从Javascript控制台(例如在Chrome浏览器中),可以很容易地访问 "数据 "数组和 "布局 "对象。

el = document.getElementById("myExample");
typeof el.data;    # "object"
el.data.length;    # 3
typeof el.layout;  # "object"
typeof el.config;  # "undefined"

我可以通过键入以下命令访问数据数组 el.data我可以用同样的方法访问布局对象。为什么我不能只通过键入 el.config? 有没有办法让 "config "像 "data "和 "layout "一样容易访问?

我之所以这么问,是因为一些Plotly.js函数,如 Plotly.react(),取一个 "config "对象。如果能方便地访问 "config "对象,这样的功能会更容易使用。

我知道 "config "对象可以通过其他方式访问,例如,使用 JSON.parse(). 但上面使用的方法 -- 只需调用 el.datael.layout -- 更加简单,这就是为什么我也想将其用于配置数据的原因。

javascript json plotly r-plotly htmlwidgets
1个回答
0
投票

如果你真的想访问 "config "对象,你可能需要这样做。硬着头皮即,随着 JSON.parse(). 但如果你只想更新config对象,然后更新Plotly图,至少有两种选择。

  1. 传递一个未命名的对象到 Plotly.react(). 例子: Plotly.react(el.data, el.layout, {"showSendToCloud" : true} ).

  2. 使用 Plotly.setPlotConfig() 其次 Plotly.react(). 例子。

    Plotly.setPlotConfig( { "showLink" : true } );
    Plotly.react(el, el.data, el.layout, {} );

(奇怪的是: Plotly.setPlotConfig() 在Plotly文档中似乎没有它自己的条目,尽管在文档的其他部分中顺便提到了它。)

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