вот GIF, представляющий то, чего я пытаюсь достичь
Это код, который я написал до сих пор
Код: Выделить всё
import inter from "../assets/fonts/inter.ttf";
function generateWeightData(num: number) {
const generatedData = [];
let currentDate = new Date("2025-01-01");
let currentWeight = 80.5; // Initial wweight
for (let i = 0; i < num; i++) {
generatedData.push({
date: currentDate.getTime(),
weight: parseFloat(currentWeight.toFixed(1)),
});
currentDate.setDate(currentDate.getDate() + 1);
const dailyVariation = (Math.random() - 0.5) * 0.14;
const trend = -0.01;
currentWeight += trend + dailyVariation;
}
return generatedData;
}
const newData = generateWeightData(365);
const minDate = newData[0].date;
const maxDate = newData[newData.length - 1].date;
const initialDateStart = newData[0].date;
const initialDateEnd = newData[6].date; // 7 giorni (indice 0-6)
export default function App() {
const font = useFont(inter, 12);
const { state: transformState } = useChartTransformState({});
const [startDate, setDataIniziale] = useState(initialDateStart);
const [endDate, setDataFine] = useState(initialDateEnd);
if (!font) {
return null;
}
return (
new Date(value).toLocaleString("en-US", {
month: "short",
day: "numeric",
}),
}}
yAxis={[
{
axisSide: "left",
font: font,
formatYLabel: (value) => `${value.toFixed(1)}kg`,
enableRescaling: true,
},
]}
frame={{ lineWidth: 2 }}
transformState={transformState}
transformConfig={{
pan: { dimensions: ["x"] },
}}
onChartBoundsChange={(e) => {
}}
onScaleChange={(xScale, yScale) => {
}}
>
{({ points }) => (
)}
);
}
Я пробовал работать с областью просмотра и доменом, но, похоже, не могу заставить их работать правильно: либо отображаются все данные от начала до конца, либо только часть без меток на оси X, а также метки оси Y не масштабируются автоматически, можете ли вы подсказать мне правильное направление? спасибо
Подробнее здесь: https://stackoverflow.com/questions/798 ... ate-y-axis
Мобильная версия