我不知道这是一个剧情问题,还是一个...... 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
. 我还隐藏了大多数对象的内容,例如。attrs
和 layout
并不是真的空的。)
从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.data
或 el.layout
-- 更加简单,这就是为什么我也想将其用于配置数据的原因。
如果你真的想访问 "config "对象,你可能需要这样做。硬着头皮即,随着 JSON.parse()
. 但如果你只想更新config对象,然后更新Plotly图,至少有两种选择。
传递一个未命名的对象到 Plotly.react()
. 例子: Plotly.react(el.data, el.layout, {"showSendToCloud" : true} )
.
使用 Plotly.setPlotConfig()
其次 Plotly.react().
例子。
Plotly.setPlotConfig( { "showLink" : true } );
Plotly.react(el, el.data, el.layout, {} );
(奇怪的是: Plotly.setPlotConfig()
在Plotly文档中似乎没有它自己的条目,尽管在文档的其他部分中顺便提到了它。)