【发布时间】:2019-10-17 06:01:26
【问题描述】:
我正在尝试使用 Plotly.js 创建一个类似于此图像中的图表:
这是一个带有两个 y 轴的分组箱线图(按站点,目前只有一个)。
我设法创建了两个版本,但都不起作用:
- 创建 5 条轨迹(每个框 1 条),以便您可以为每个框定义正确的 y 轴。然后将它们全部放在一起,因为它们是不同的痕迹。
- 创建 3 条轨迹来表示 A、B 和 C。但是(afaik)我必须为每个轨迹选择一个 y 轴,这意味着我不能在两个 y 轴上有相同的轨迹。
这是方法 1 的代码 (https://codepen.io/wacmemphis/pen/gJQJeO?editors=0010)
var data =[
{
"x":[
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1"
],
"xaxis":"x",
"yaxis":"y",
"name":"A",
"type":"box",
"boxpoints":false,
"y":[
"3.81",
"3.74",
"3.62",
"3.50",
"3.50",
"3.54"
]
},
{
"x":[
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1"
],
"xaxis":"x",
"yaxis":"y",
"name":"B",
"type":"box",
"boxpoints":false,
"y":[
"1.54",
"1.54",
"1.60",
"1.41",
"1.65",
"1.47"
]
},
{
"x":[
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1"
],
"xaxis":"x",
"yaxis":"y",
"name":"C",
"type":"box",
"boxpoints":false,
"y":[
"3.31",
"3.81",
"3.74",
"3.63",
"3.76",
"3.68"
]
},
{
"x":[
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1"
],
"xaxis":"x2",
"yaxis":"y2",
"name":"A",
"type":"box",
"boxpoints":false,
"y":[
"3.81",
"3.74",
"3.62",
"3.50",
"3.50",
"3.54"
]
},
{
"x":[
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1",
"Site 1"
],
"xaxis":"x2",
"yaxis":"y2",
"name":"C",
"type":"box",
"boxpoints":false,
"y":[
"3.31",
"3.81",
"3.74",
"3.63",
"3.76",
"3.68"
]
}
];
var layout = {
yaxis: {
domain: [0, 0.5],
title: 'axis 1',
},
yaxis2: {
domain: [0.5, 1],
title: 'axis2',
},
boxmode: 'group'
};
Plotly.newPlot('myDiv', data, layout);
有人有什么想法吗?
【问题讨论】:
-
关于那个的两个问题:是只需要使用一个带有两个轴的图表还是两个图表也可以? autorange 是所需的范围方法,还是显示图像中的范围固定为这些值?
-
@Jankapunkt 也可以是两个图表,但单独的痕迹应该在同一个地方,颜色相同。在某些图表中,可能根本不存在跟踪(上面屏幕截图的第一部分为橙色)。
-
这是可能的,但问题仍然存在,无论您是否知道某些范围,或者您是否完全不知道数据的可能范围(我假设,因为您使用
domain而不是range)。也许您可以添加一些关于数据可能变化的小细节以及您选择这两个域(0 - 0.5 和 0.5 - 1)的原因 -
@Jankapunkt 按照我的理解,0-0.5 和 0.5-1 仅用于确定每个 y 轴的高度比例,但我可能弄错了。在获取数据并将其重新格式化为跟踪之前,我不知道值范围。
-
这就是为什么我询问可能的阈值,因为您将如何确定
name: "B"的数据将是yaxis的一部分,但不是yaxis2的一部分?当然,您只是在示例中手动省略了,但这在输入任意数据时不起作用,其中自动范围将考虑所有要显示的数据,而域将考虑所有数据进行缩放。如果您可以确定两个轴的范围(或任何其他阈值标准以在上轴中省略B),我可以为您提供一个有效的示例。
标签: javascript plotly.js