Plotly.js 多个子图未按预期工作
Plotly.js multiple subplots not working as expected
编辑添加:寻找 "plotly.js" 方法来做到这一点。此 "small multiple" 可视化应该有一些 "plotly.js" 解决方案,但尚未找到。
我正在使用数组(下面的示例元素)为 plotly.js
多个子图填充 traces
每个 multiple-subplots example
[{
"key": "Ontario|Toronto",
"values": [{
"key": "2020-01-25",
"value": 1
}, {
"key": "2020-01-27",
"value": 1
}, {
"key": "2020-05-12",
"value": 218
}, {
"key": "2020-05-13",
"value": 169
}]
}, {
etc
}]
该数组有 94 个元素,其中包含创建每个跟踪所需的信息。这将产生 94 个子图,每个轨迹一个。这个 plotly.js
可视化也可以称为 "small multiples"。
我正在使用以下代码动态创建 traces
并在循环中填充子图定义:
// create chart data
var traces = [];
var rowCount = (caseRegionByDate.length / 2).toFixed()
for (var i=0; i<caseRegionByDate.length; i++) {
//console.log(caseRegionByDate[i]['key']);
var trace = {};
var x = [];
var y = [];
for (var j=0; j<caseRegionByDate[i]['values'].length; j++) {
//console.log(caseRegionByDate[i]['values'][j]['key']);
x.push(caseRegionByDate[i]['values'][j]['key']);
y.push(caseRegionByDate[i]['values'][j]['value']);
}
// create trace i
trace = {
"x":x,
"y":y,
"xaxis":"x"+i,
"yaxis":"y"+i,
"type":"scatter"
}
// push trace to traces
traces.push(trace);
}
console.log(JSON.stringify(traces));
var layout = {
grid: {rows: rowCount, columns: 2, pattern: 'independent'},
};
Plotly.newPlot('multiple_charts', traces, layout);
这会创建 traces
变量,该变量由每个跟踪填充,如下例所示。看起来正确:
[{
"x": ["2020-03-16", "2020-03-23", "2020-03-24", "2020-03-25", "2020-03-31", "2020-04-01", "2020-04-02", "2020-04-03", "2020-04-06", "2020-04-07", "2020-04-08", "2020-04-09", "2020-04-10", "2020-04-11", "2020-04-13", "2020-04-14", "2020-04-15", "2020-04-16", "2020-04-17", "2020-04-18", "2020-04-21", "2020-04-22", "2020-04-23", "2020-04-24", "2020-04-25", "2020-04-26", "2020-04-27", "2020-04-28", "2020-04-29", "2020-04-30", "2020-05-01", "2020-05-02", "2020-05-03", "2020-05-04", "2020-05-05", "2020-05-06", "2020-05-07", "2020-05-08", "2020-05-09", "2020-05-10", "2020-05-11", "2020-05-12", "2020-05-13"],
"y": [1, 1, 1, 1, 9, 35, 3, 16, 33, 13, 9, 5, 5, 1, 22, 3, 4, 7, 19, 4, 7, 2, 18, 11, 9, 9, 9, 13, 1, 3, 7, 18, 5, 4, 4, 5, 3, 1, 2, 2, 3, 1, 2],
"xaxis": "x0",
"yaxis": "y0",
"type": "scatter"
}, {
"x": ["2020-03-14", "2020-03-26", "2020-03-27", "2020-04-02", "2020-04-06", "2020-04-09", "2020-04-14", "2020-04-17", "2020-04-18", "2020-04-20", "2020-04-22"],
"y": [1, 1, 1, 2, 2, 3, 1, 1, 1, 2, 1],
"xaxis": "x1",
"yaxis": "y1",
"type": "scatter"
},
etc
]
但是,结果似乎是一行两列,所有的轨迹(有 94 条轨迹)都被压扁了。这是截图。
知道发生了什么事吗?我希望有 48 行 2 列,每个跟踪一个子图。
与多个子图示例的唯一区别是我的 x 轴有日期字符串而不是数字。其他都一样。
子图实际上是在 3 x rowCount 网格中创建的。但是,如屏幕截图所示,它们都被垂直压扁。
似乎图表的默认高度和宽度尺寸(未使用 layout.height
明确定义)是我的屏幕截图中显示的,例如对于 94 个子图来说太小了。
快速解决方法是简单地增加图表的 layout.height
大小。然后所有子图都是可见的。根据 Juan 的建议动态计算 layout.height
,相对于行数效果很好。
显然,还可以设置每个子图的 x 和 y 域属性来调整子图的大小,这也将提供所需的结果。
编辑添加:寻找 "plotly.js" 方法来做到这一点。此 "small multiple" 可视化应该有一些 "plotly.js" 解决方案,但尚未找到。
我正在使用数组(下面的示例元素)为 plotly.js
多个子图填充 traces
每个 multiple-subplots example
[{
"key": "Ontario|Toronto",
"values": [{
"key": "2020-01-25",
"value": 1
}, {
"key": "2020-01-27",
"value": 1
}, {
"key": "2020-05-12",
"value": 218
}, {
"key": "2020-05-13",
"value": 169
}]
}, {
etc
}]
该数组有 94 个元素,其中包含创建每个跟踪所需的信息。这将产生 94 个子图,每个轨迹一个。这个 plotly.js
可视化也可以称为 "small multiples"。
我正在使用以下代码动态创建 traces
并在循环中填充子图定义:
// create chart data
var traces = [];
var rowCount = (caseRegionByDate.length / 2).toFixed()
for (var i=0; i<caseRegionByDate.length; i++) {
//console.log(caseRegionByDate[i]['key']);
var trace = {};
var x = [];
var y = [];
for (var j=0; j<caseRegionByDate[i]['values'].length; j++) {
//console.log(caseRegionByDate[i]['values'][j]['key']);
x.push(caseRegionByDate[i]['values'][j]['key']);
y.push(caseRegionByDate[i]['values'][j]['value']);
}
// create trace i
trace = {
"x":x,
"y":y,
"xaxis":"x"+i,
"yaxis":"y"+i,
"type":"scatter"
}
// push trace to traces
traces.push(trace);
}
console.log(JSON.stringify(traces));
var layout = {
grid: {rows: rowCount, columns: 2, pattern: 'independent'},
};
Plotly.newPlot('multiple_charts', traces, layout);
这会创建 traces
变量,该变量由每个跟踪填充,如下例所示。看起来正确:
[{
"x": ["2020-03-16", "2020-03-23", "2020-03-24", "2020-03-25", "2020-03-31", "2020-04-01", "2020-04-02", "2020-04-03", "2020-04-06", "2020-04-07", "2020-04-08", "2020-04-09", "2020-04-10", "2020-04-11", "2020-04-13", "2020-04-14", "2020-04-15", "2020-04-16", "2020-04-17", "2020-04-18", "2020-04-21", "2020-04-22", "2020-04-23", "2020-04-24", "2020-04-25", "2020-04-26", "2020-04-27", "2020-04-28", "2020-04-29", "2020-04-30", "2020-05-01", "2020-05-02", "2020-05-03", "2020-05-04", "2020-05-05", "2020-05-06", "2020-05-07", "2020-05-08", "2020-05-09", "2020-05-10", "2020-05-11", "2020-05-12", "2020-05-13"],
"y": [1, 1, 1, 1, 9, 35, 3, 16, 33, 13, 9, 5, 5, 1, 22, 3, 4, 7, 19, 4, 7, 2, 18, 11, 9, 9, 9, 13, 1, 3, 7, 18, 5, 4, 4, 5, 3, 1, 2, 2, 3, 1, 2],
"xaxis": "x0",
"yaxis": "y0",
"type": "scatter"
}, {
"x": ["2020-03-14", "2020-03-26", "2020-03-27", "2020-04-02", "2020-04-06", "2020-04-09", "2020-04-14", "2020-04-17", "2020-04-18", "2020-04-20", "2020-04-22"],
"y": [1, 1, 1, 2, 2, 3, 1, 1, 1, 2, 1],
"xaxis": "x1",
"yaxis": "y1",
"type": "scatter"
},
etc
]
但是,结果似乎是一行两列,所有的轨迹(有 94 条轨迹)都被压扁了。这是截图。
知道发生了什么事吗?我希望有 48 行 2 列,每个跟踪一个子图。
与多个子图示例的唯一区别是我的 x 轴有日期字符串而不是数字。其他都一样。
子图实际上是在 3 x rowCount 网格中创建的。但是,如屏幕截图所示,它们都被垂直压扁。
似乎图表的默认高度和宽度尺寸(未使用 layout.height
明确定义)是我的屏幕截图中显示的,例如对于 94 个子图来说太小了。
快速解决方法是简单地增加图表的 layout.height
大小。然后所有子图都是可见的。根据 Juan 的建议动态计算 layout.height
,相对于行数效果很好。
显然,还可以设置每个子图的 x 和 y 域属性来调整子图的大小,这也将提供所需的结果。