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



我不知道这是一个情节问题还是htmlwidgets问题。也许两者兼而有之。

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

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

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

此代码生成一个显示绘图小部件的 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中(,可以轻松访问"data"数组和"layout"对象:

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

我只需键入el.data即可访问数据数组,并且我可以用相同的方式访问布局对象。为什么我不能仅通过键入el.config来访问配置对象?有没有办法使"配置"像"数据"和"布局"一样易于访问?

我问是因为一些 Plotly .js函数,如Plotly.react(),需要一个"配置"对象。如果可以轻松访问"config"对象,则此类函数将更容易使用。

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

如果你真的想访问"config"对象,你可能需要用困难的方式这样做,即使用JSON.parse()。但是,如果您只想更新配置对象,然后更新您的 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 文档中没有自己的条目,尽管在文档的其他部分中顺便提到了它。

相关内容

  • 没有找到相关文章

最新更新