Это мое решение для вашей проблемы https://jsfiddle.net/huynhsamha/e54djwxp/
И это скриншот для результата
В моем решенииЯ использую type="line"
и обе оси X и Y с type="linear"
.Я также добавляю свойство options
к <chart>
для использования options
в ChartJS
<div id="vue">
<chart type="line" :data="data" :options="options"></chart>
</div>
. options
настроит оси X и Y для визуализации точек данных иожидаемое значение:
options: {
scales: {
xAxes: [{
type: 'linear',
ticks: {
min: 1,
max: 6,
stepSize: 1
}
}],
yAxes: [{
type: 'linear',
ticks: {
min: 0,
max: 1,
stepSize: 0.1
}
}]
}
}
И data
будет иметь 2 datasets
.Первый - это точки данных, используйте тип line
, а второй - ожидаемое значение, которое использует тип bubble
.
data: {
datasets: [{
label: 'Frequency Data',
data: dataPoints.map(({ val, freq }) => ({
x: val,
y: freq
})),
backgroundColor: 'rgba(72, 202, 59, 0.4)',
borderColor: 'rgba(72, 202, 59, 1)'
}, {
label: 'Expected Value',
type: 'bubble',
data: [{
x: expectedValue,
y: 0,
r: 8 // radius
}],
backgroundColor: 'rgba(255, 68, 0, 0.4)',
borderColor: 'rgba(255, 68, 0, 1)'
}]
},
В datasets
у нас есть dataPoints
и expectedValue
,он будет получен из API, чтобы получить ваши данные.Я также моделирую простой API для точек данных:
// simulate the API to get data points
const retrieveData = () => [
{ val: 1, freq: 0.15 },
{ val: 2, freq: 0.25 },
{ val: 3, freq: 0.3 },
{ val: 4, freq: 0.2 },
{ val: 5, freq: 0.1 },
{ val: 6, freq: 0.45 }
]
// fetch your data here, return array of JSON { val, freg }
const dataPoints = retrieveData() || [];
// calculate expected value = sum( val * freq ) each i in dataPoints
const expectedValue = dataPoints.reduce((cur, { val, freq }) => cur + val * freq, 0).toFixed(4);
Вы можете запустить сниппет или запустить на скрипке https://jsfiddle.net/huynhsamha/e54djwxp/92/
<script async src="//jsfiddle.net/huynhsamha/e54djwxp/92/embed/js,html,css,result/dark/"></script>