На моем графике данных Recharts, содержащем строки даты, ось X выглядит довольно запутанной.
Можно ли настроить Recharts для маркировки оси только двумя последними цифрами года? Например, 17
, 18
, 19
, 20
без повторения метки для каждого года.
import { ResponsiveContainer, LineChart, Line, CartesianGrid, XAxis, YAxis, Tooltip } from 'recharts';
export function Chart() {
const d = [
{date: '2017-02-01', price: 231},
{date: '2017-04-01', price: 453},
{date: '2017-16-01', price: 123},
{date: '2018-01-01', price: 234},
{date: '2018-04-01', price: 958},
{date: '2018-11-01', price: 163},
{date: '2019-03-01', price: 293},
{date: '2019-10-01', price: 471},
{date: '2020-07-01', price: 881},
{date: '2020-09-01', price: 122},
]
return (
<ResponsiveContainer width="100%" height={400}>
<LineChart data={d}>
<Line type="monotone" dataKey="price" stroke="#8884d8" />
<CartesianGrid stroke="#ccc" strokeDasharray="5 5" />
<XAxis dataKey="date" />
<YAxis dataKey="price" />
<Tooltip />
</LineChart>
</ResponsiveContainer>
)
}
Дополнительная проблема: используя подход Баса ван дер Линдена, итоговая диаграмма действительно близка к тому, что нам нужно! Но точки данных не расположены должным образом по оси X.
Это станет более очевидным, если мы воспользуемся массивом d
ниже. На полученной диаграмме вы можете видеть, что точки данных за 2018 год занимают гораздо больше места по оси X, чем точки данных за 2017, 2019 и 2020 годы вместе взятые. Будет лучше, если промежуток между метками галочки 17
и 18
будет такой же по длине, как расстояние между метками галочки 18
и 19
.
const d = [
{ date: "2017-02-01", price: 231 },
{ date: "2017-04-01", price: 453 },
{ date: "2017-16-01", price: 123 },
{ date: "2018-01-01", price: 234 },
{ date: "2018-04-01", price: 958 },
{ date: "2018-11-01", price: 163 },
{ date: "2018-11-02", price: 163 },
{ date: "2018-11-03", price: 163 },
{ date: "2018-11-06", price: 163 },
{ date: "2018-11-05", price: 163 },
{ date: "2018-11-07", price: 163 },
{ date: "2018-11-08", price: 163 },
{ date: "2018-11-09", price: 163 },
{ date: "2018-11-00", price: 163 },
{ date: "2018-11-11", price: 163 },
{ date: "2018-11-12", price: 163 },
{ date: "2018-11-13", price: 163 },
{ date: "2018-11-14", price: 163 },
{ date: "2018-11-15", price: 163 },
{ date: "2018-11-16", price: 163 },
{ date: "2018-11-17", price: 163 },
{ date: "2019-03-01", price: 293 },
{ date: "2019-10-01", price: 471 },
{ date: "2020-07-01", price: 881 },
{ date: "2020-09-01", price: 122 }
];