boyinfuture's picture
feat: Build complete application with all features
c3bf538
import React from 'react';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, Area } from 'recharts';
function PredictionChart({ data }) {
if (!data || data.length === 0) return null;
// Format the date for the X-axis
const formatXAxis = (tickItem) => {
return new Date(tickItem).toLocaleDateString('en-IN', { month: 'short', day: 'numeric' });
};
return (
<div style={{ width: '100%', height: 400 }}>
<ResponsiveContainer>
<LineChart data={data} margin={{ top: 5, right: 20, left: -10, bottom: 5 }}>
<CartesianGrid strokeDasharray="3 3" stroke="#4A5568" />
<XAxis dataKey="ds" tickFormatter={formatXAxis} stroke="#A0AEC0" />
<YAxis stroke="#A0AEC0" domain={['dataMin - 5', 'dataMax + 5']} />
<Tooltip
contentStyle={{ backgroundColor: '#1A202C', border: '1px solid #4A5568' }}
labelFormatter={(label) => new Date(label).toLocaleDateString('en-IN')}
/>
<Legend />
{/* Confidence Interval Area */}
<Area type="monotone" dataKey="yhat_upper" fill="#2F855A" stroke="#2F855A" fillOpacity={0.1} name="Upper Confidence" dot={false} />
<Area type="monotone" dataKey="yhat_lower" fill="#2F855A" stroke="#2F855A" fillOpacity={0.1} name="Lower Confidence" dot={false} />
{/* Forecast Line */}
<Line type="monotone" dataKey="yhat" stroke="#48BB78" strokeWidth={2} name="Forecast" dot={false} />
</LineChart>
</ResponsiveContainer>
</div>
);
}
export default PredictionChart;