| 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; |
|
|
| |
| 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; |