plotly:在存储的 JSON 字符串中公开 "config" 对象,以便于与 Plotly.JS 函数一起使用
plotly: exposing the "config" object in the stored JSON string, for easier use with Plotly.JS functions
我不知道这是一个情节问题还是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
此代码生成一个 HTML 页面,显示 plotly 小部件。该页面包含一个 <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
来访问配置对象?有没有办法让 "config" 像 "data" 和 "layout" 一样容易访问?
我问是因为一些 Plotly.js 函数,比如 Plotly.react()
,需要一个 "config" 对象。如果可以轻松访问 "config" 对象,这样的函数会更容易使用。
我知道 "config" 对象可以通过其他方式访问,例如 JSON.parse()
。但是上面使用的方法——只需调用 el.data
或 el.layout
——要容易得多,这就是为什么我也想将它用于配置数据。
如果您真的想访问 "config" 对象,您可能需要这样做 the hard way,即使用 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 文档中似乎没有自己的条目,尽管在文档的其他部分中提到了它。)
我不知道这是一个情节问题还是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
此代码生成一个 HTML 页面,显示 plotly 小部件。该页面包含一个 <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
来访问配置对象?有没有办法让 "config" 像 "data" 和 "layout" 一样容易访问?
我问是因为一些 Plotly.js 函数,比如 Plotly.react()
,需要一个 "config" 对象。如果可以轻松访问 "config" 对象,这样的函数会更容易使用。
我知道 "config" 对象可以通过其他方式访问,例如 JSON.parse()
。但是上面使用的方法——只需调用 el.data
或 el.layout
——要容易得多,这就是为什么我也想将它用于配置数据。
如果您真的想访问 "config" 对象,您可能需要这样做 the hard way,即使用 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 文档中似乎没有自己的条目,尽管在文档的其他部分中提到了它。)