Javascript 在plotly中创建散点图而不声明数据的多个变量

Javascript 在plotly中创建散点图而不声明数据的多个变量,javascript,plot,plotly,scatter-plot,plotly.js,Javascript,Plot,Plotly,Scatter Plot,Plotly.js,以下记录是我想使用plotly库的散点图绘制的数据集的一个小样本 id value condition 1 0.00167736464652281 CM 1 0.00409236292494868 ECM 1 0.00402114732563961 SAX 2 0.0136247916329259 SAX 2 0.0151036287262202 ECM 2 0.0115020440436599 CM 3 0.0115571286240125 CM 3

以下记录是我想使用plotly库的散点图绘制的数据集的一个小样本

id  value   condition
1   0.00167736464652281 CM
1   0.00409236292494868 ECM
1   0.00402114732563961 SAX
2   0.0136247916329259  SAX
2   0.0151036287262202  ECM
2   0.0115020440436599  CM
3   0.0115571286240125  CM
3   0.0155058764871028  ECM
3   0.0162593141280405  SAX
4   0.0162953858863326  SAX
4   0.0172050279098291  ECM
4   0.0140566233578565  CM
5   0.0141510897863713  CM
5   0.0177908403313223  ECM
5   0.0181831372346949  SAX
根据标准方法(使用此方法),我应将值分成3个变量-每个条件一个变量(例如var CM、var ECM、var SAX),如下所示:

var CM = {
  x: [1, 2, 3, 4, 5],
  y: [0.00167736464652281, 0.0115020440436599, 0.0115571286240125, 0.0140566233578565, 0.0141510897863713],
  mode: 'markers',
  type: 'scatter'
};

有没有更聪明的方法来使用样本数据的结构创建散点图?

假设您的数据位于一组对象中,您可以使用以下方法

  • 迭代一组
    条件
    s

    var conditions = new Set(data.map(a => a.condition));
    conditions.forEach(function(condition) {
        var newArray = data.filter(function(el) {
            return el.condition == condition;
        });
    })
    
  • id
    映射到
    x
    value
    映射到
    y

    traces.push({
        x: newArray.map(a => a.id),
        y: newArray.map(a => a.value),
        name: condition,
        mode: 'markers',
        type: 'scatter'
    })
    
data=[];
数据推送({
“id”:1,
“值”:0.001677364652281,
“条件”:“CM”
});
数据推送({
“id”:1,
“值”:0.00409236292494868,
“条件”:“ECM”
});
数据推送({
“id”:1,
“值”:0.00402114732563961,
“条件”:“SAX”
});
数据推送({
“id”:2,
“值”:0.0136247916329259,
“条件”:“SAX”
});
数据推送({
“id”:2,
“值”:0.0151036287262202,
“条件”:“ECM”
});
数据推送({
“id”:2,
“值”:0.0115020440436599,
“条件”:“CM”
});
数据推送({
"id":3,,
“值”:0.0115571286240125,
“条件”:“CM”
});
数据推送({
"id":3,,
“值”:0.0155058764871028,
“条件”:“ECM”
});
数据推送({
"id":3,,
“值”:0.0162593141280405,
“条件”:“SAX”
});
数据推送({
“id”:4,
“值”:0.0162953858863326,
“条件”:“SAX”
});
数据推送({
“id”:4,
“值”:0.0172050279098291,
“条件”:“ECM”
});
数据推送({
“id”:4,
“值”:0.0140566233578565,
“条件”:“CM”
});
数据推送({
“id”:5,
“值”:0.014510897863713,
“条件”:“CM”
});
数据推送({
“id”:5,
“值”:0.0177908403313223,
“条件”:“ECM”
});
数据推送({
“id”:5,
“值”:0.0181831372346949,
“条件”:“SAX”
});
var条件=新集合(data.map(a=>a.condition));
跟踪=[];
条件。forEach(函数(条件){
var newArray=data.filter(函数(el){
返回el.condition==条件;
});
推({
x:newArray.map(a=>a.id),
y:newArray.map(a=>a.value),
名称:条件,,
模式:'标记',
键入:“散布”
})
})
Plotly.plot('myPlot',traces)


使用箭头函数过滤数据怎么样?您能给我看一下示例代码吗?这正是我想要的。干杯!