使用 plotly js 在散点图上进行基于条件的着色

Condition based coloring on scatter plot using plotly js

我将 x 轴作为某个范围,例如:-100、-50、-12、-6、0、6、12、50、100,y 轴是标签,例如:不同的巧克力品牌 kitkat、5star , milkybar, e.t.c 或者反之 X 和 y 轴

我想要每个品牌的散点图和条件着色(每个品牌的着色条件不同)例如:对于 kitkat 品牌,如果值在小于或等于 -6 和 +6 黄色散点图的范围内,如果大于 6 绿色,如果小于 -6 它应该是红色。 5 星 - 如果值在小于或等于 -12 和 +12 的范围内黄色散点,如果大于 12 绿色,如果小于 -12 则应该是红色。

我是 plotly js 的新手。我在所有示例中都找到了 x、y 值,但无法在 y 轴上找到类似的品牌,在 x 轴上找不到类似的值。

我希望每个品牌在该水平线上都有各自的散点,只是现在无法显示。

这是我的数据,

[{"kitkat":[1, -9, 60, 5, 19],
"5star":[20,-78,12,18,90],
"milkybar":[-67,20,-8,90,12]}]

我尝试了此代码,但无法为每个品牌提供每个数据,甚至无法提供条件着色

这个首字母:

data = [];
data.push({
  'id': "KitKat",
  'value': 12,
  'condition': 'CM'
});
data.push({
  'id': "KitKat",
  'value': 4,
  'condition': 'ECM'
});
data.push({
  'id': "KitKat",
  'value': -23,
  'condition': 'SAX'
});
data.push({
  'id': "5Start",
  'value': 4,
  'condition': 'SAX'
});
data.push({
  'id': "5Start",
  'value': 78,
  'condition': 'ECM'
});
data.push({
  'id': "5Start",
  'value': 78,
  'condition': 'CM'
});
data.push({
  'id': "ABC",
  'condition': 'CM'
});
data.push({
  'id': "DEF",
  'condition': 'CM'
});
data.push({
  'id': "XYZ",
  'condition': 'CM'
});


var conditions = new Set(data.map(a => a.condition));
traces = [];
conditions.forEach(function(condition) {
  var newArray = data.filter(function(el) {
    return el.condition == condition;
  });
  traces.push({
    x: newArray.map(a => a.id),
    y: newArray.map(a => a.value),
    name: condition,
    mode: 'markers',
    type: 'scatter'
  })
})
Plotly.plot('myPlot', traces);
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="myPlot"></div>

任何人都可以建议如何实现我的输出

trace.marker.color 接受一个数组,您可以使用它为每个数据点赋予单独的颜色。

const data = [
  {
    "id": "kitkat",
    "value": 12,
    "condition": "CM"
  },
  {
    "id": "kitkat",
    "value": 4,
    "condition": "ECM"
  },
  {
    "id": "kitkat",
    "value": -23,
    "condition": "SAX"
  },
  {
    "id": "milkyway",
    "value": 12,
    "condition": "CM"
  },
  {
    "id": "milkyway",
    "value": 4,
    "condition": "ECM"
  },
  {
    "id": "milkyway",
    "value": -23,
    "condition": "SAX"
  }
];

const conditions = ["CM", "ECM", "SAX"];

function getColor(data) {
  // enter your conditional coloring code here
  if (data.id === 'kitkat' && data.value > 0) {
    return '#0000FF'
  }
  return '#FF0000';
}

const traces = conditions.map(condition => {
  const filteredData = data.filter(d => d.condition === condition);
  return {
    x: filteredData.map(d => d.id),
    y: filteredData.map(d => d.value),
    name: condition,
    mode: 'markers',
    type: 'scatter',
    marker: {
      color: filteredData.map(d => getColor(d))
    }
  };
});

Plotly.plot('myPlot', traces, {showlegend: false});
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="myPlot"></div>