Я пытаюсь создать гистограмму с помощью ApexCharts (точнее, React-ApexCharts, но я не думаю, что это имеет значение).
Пример вывода, который мне нужен: Приведенный выше пример изначально был создан с использованием Chart.js (источник). Синяя заливка одной из полос не имеет значения.
Несмотря на то, что «гистограмма» указана как один из типов диаграмм в ApexCharts (ссылка), мне не удалось воспроизвести приведенный выше пример. Проблемы, которые я не могу решить:
number of bars + 1 количества меток по оси X (т. е. в приведенном выше примере 10 меток и 9 полос)Hours: 6 - 7 выше)Пример кода, где я застрял: https://codesandbox.io/s/dreamy-wiles-8mbp3e



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Что-то похожее на ваш образ и перечисленные вами требования можно установить так:
const yData = [5,8,24,16,32,42,30,17,11];
const options = {
chart: {
type: 'bar'
},
series: [{
name: 'visitors',
data: Array.from({length: yData.length},
(_, i)=>({
x: 0.5+i,
y: yData[i],
... i === 4 ? ({fillColor: 'rgba(32, 120, 255, 0.4)', strokeColor: '#80afff'}) : ({})
}))
}],
plotOptions:{
bar: {
columnWidth: "95%",
strokeWidth: 2,
borderRadius: 5,
borderRadiusApplication: "end",
}
},
fill:{
colors: '#ff4040',
opacity: 0.3,
},
stroke:{
width: 2,
colors: ['#ee8080']
},
dataLabels: {enabled: false},
grid: {
xaxis: {
lines: {
show: true
}
},
yaxis: {
lines: {
show: true
}
}
},
xaxis: {
type: "numeric",
min: 0,
max: yData.length,
tickAmount: yData.length,
labels: {formatter: x => x /*Math.round(x)*/},
title: {text: "Hours", offsetY: 70},
axisBorder: {
color: "#000000"
}
},
yaxis: {
title: {text: "Visitors"},
min: 0,
max: Math.max(...yData),
axisBorder: {
show: true,
color: "#000000"
}
},
tooltip:{
onDatasetHover: {
highlightDataSeries: true,
},
x: {formatter: x=>{return 'Hours '+(x-0.5)+'-'+(x+0.5);}}
}
}
const chart = new ApexCharts(document.querySelector("#chart"), options);
chart.render();<script src = "https://cdn.jsdelivr.net/npm/apexcharts"></script>
<div id = "chart" style = "border: 1px solid #444">
</div>Если бы вы указали код Chart.js, можно было бы лучше понять все ваши требования.
@swimmer Извините, я, должно быть, пропустил это или использовал раннюю версию вашего поста.
Соответствует всем требованиям! Что я узнал: (1) для построения гистограммы в ApexCharts.js тип bar работает лучше, чем тип histogram; (2) передать как x, так и y данным series; (3) отделите xaxis от options, чтобы между делениями были полосы. Спасибо!
Адаптация принятого ответа @kikon в React-ApexCharts:
https://codesandbox.io/s/zealous-raman-02e7qk
import "./styles.css";
import Chart from "react-apexcharts";
export default function App() {
const yData = [5, 8, 24, 16, 32, 42, 30, 17, 11];
const series = [
{
name: "visitors",
data: Array.from({ length: yData.length }, (_, i) => ({
x: 0.5 + i,
y: yData[i],
...(i === 4
? { fillColor: "rgba(32, 120, 255, 0.4)", strokeColor: "#80afff" }
: {})
}))
}
];
const options = {
chart: {
type: "bar"
},
plotOptions: {
bar: {
columnWidth: "95%",
strokeWidth: 2,
borderRadius: 5,
borderRadiusApplication: "end"
}
},
fill: {
colors: "#ff4040",
opacity: 0.3
},
stroke: {
width: 2,
colors: ["#ee8080"]
},
dataLabels: { enabled: false },
grid: {
xaxis: {
lines: {
show: true
}
},
yaxis: {
lines: {
show: true
}
}
},
xaxis: {
type: "numeric",
min: 0,
max: yData.length,
tickAmount: yData.length,
labels: { formatter: (x) => x /*Math.round(x)*/ },
title: { text: "Hours", offsetY: 70 },
axisBorder: {
color: "#000000"
}
},
yaxis: {
title: { text: "Visitors" },
min: 0,
max: Math.max(...yData),
axisBorder: {
show: true,
color: "#000000"
}
},
tooltip: {
onDatasetHover: {
highlightDataSeries: true
},
x: {
formatter: (x) => {
return "Hours " + (x - 0.5) + "-" + (x + 0.5);
}
}
}
};
return <Chart options = {options} series = {series} type = "bar" height = {260} />;
}
Код Chart.js связан в ОП (копия ссылки)