我不知道这是一个情节问题还是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
中省略了一些对象。我还隐藏了大多数对象的内容;例如,attrs
和layout
并不是真正的空。
从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.data
或el.layout
- 要容易得多,这就是为什么我也想将其用于配置数据。
如果你真的想访问"config"对象,你可能需要用困难的方式这样做,即使用JSON.parse()
。但是,如果您只想更新配置对象,然后更新您的 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 文档中没有自己的条目,尽管在文档的其他部分中顺便提到了它。