Это не будет работать для меня, потому что у меня есть 500+ значений x и y.
Вместо создания большого массива ваших данных, я предлагаю использовать объект, который отображает вашиданные в массив тепловых карт.
Таким образом, первая часть объекта содержит ось X с осью Y внутри.Ось z для каждой координаты идет последней.Например:
const myValues = {
100: { // <- x-axis = 100
100: 20, // <- y-axis = 100 with z-axis = 20
101: 40,
102: 60,
103: 80,
104: 100
}
}
После инициализации нуля массива оси z с помощью функции getBlank
, используйте функцию setMyValues
, чтобы отобразить объект myValues
на полную карту нагрева.
См. Этот фрагмент для примера и увеличьте диапазон 100 X 100, чтобы увидеть значения выборки.
// your specific values
const myValues = {
100: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
101: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
102: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
103: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
104: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
105: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
106: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
107: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
108: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
109: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
},
110: {
100: 20,
101: 40,
102: 60,
103: 80,
104: 100
}
};
const z = getBlank(501, 501);
setMyValues();
const graph = {
data: [{
z: z,
type: 'heatmap'
}],
layout: {
autosize: true,
xaxis: {
side: 'top'
}
}
};
function setMyValues() {
Object.keys(myValues).forEach(row => {
Object.keys(myValues[row]).forEach(col => {
z[row][col] = myValues[row][col];
});
});
}
// set blank heat map
function getBlank(xs, ys) {
const z = [];
const x = range(xs);
const y = range(ys);
x.forEach(row => {
rowArray = [];
y.forEach(col => {
rowArray.push(0);
});
z.push(rowArray);
});
return z;
}
function range(size, startAt = 0) {
return [...Array(size).keys()].map(i => i + startAt);
}
TESTER = document.getElementById('tester');
Plotly.plot(TESTER, graph);
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="tester" style="width:600px;height:250px;"></div>