Skip to content

Commit 65b48aa

Browse files
committed
feat: add intraday-breaks-1 example
1 parent b7e4b71 commit 65b48aa

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

stories/line.stories.tsx

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2089,3 +2089,95 @@ export function LineDraggable() {
20892089
</LineChart>
20902090
);
20912091
}
2092+
2093+
export function IntradayBreaks1() {
2094+
var roundTime = echarts.time.roundTime;
2095+
var formatTime = echarts.time.format;
2096+
var BREAK_GAP = '1%';
2097+
var DATA_ZOOM_MIN_VALUE_SPAN = 3600 * 1000;
2098+
function generateData() {
2099+
var seriesData = [];
2100+
var breaks = [];
2101+
var time = new Date('2024-04-09T00:00:00Z');
2102+
var endTime = new Date('2024-04-12T23:59:59Z').getTime();
2103+
var todayCloseTime = new Date();
2104+
updateDayTime(time, todayCloseTime);
2105+
function updateDayTime(time: Date, todayCloseTime: Date) {
2106+
roundTime(time, 'day', true);
2107+
todayCloseTime.setTime(time.getTime());
2108+
time.setUTCHours(9, 30); // Open time
2109+
todayCloseTime.setUTCHours(16, 0); // Close time
2110+
}
2111+
var valBreak = false;
2112+
for (var val = 1669; time.getTime() <= endTime; ) {
2113+
var delta;
2114+
if (valBreak) {
2115+
delta = Math.floor((Math.random() - 0.5 * Math.sin(val / 1000)) * 20 * 100) / 10;
2116+
valBreak = false;
2117+
} else {
2118+
delta = Math.floor((Math.random() - 0.5 * Math.sin(val / 1000)) * 20 * 100) / 100;
2119+
}
2120+
val = val + delta;
2121+
val = +val.toFixed(2);
2122+
seriesData.push([time.getTime(), val]);
2123+
time.setMinutes(time.getMinutes() + 1);
2124+
if (time.getTime() > todayCloseTime.getTime()) {
2125+
// Use `NaN` to break the line.
2126+
seriesData.push([time.getTime(), NaN]);
2127+
var breakStart = todayCloseTime.getTime();
2128+
time.setUTCDate(time.getUTCDate() + 1);
2129+
updateDayTime(time, todayCloseTime);
2130+
var breakEnd = time.getTime();
2131+
valBreak = true;
2132+
breaks.push({ start: breakStart, end: breakEnd, gap: BREAK_GAP });
2133+
}
2134+
}
2135+
return { seriesData, breaks };
2136+
}
2137+
var _data = generateData();
2138+
2139+
return (
2140+
<LineChart
2141+
style={{ width: 480, height: 360 }}
2142+
useUTC
2143+
grid={{ top: '25%', bottom: '40%' }}
2144+
xAxis={[
2145+
{
2146+
type: 'time',
2147+
interval: 1000 * 60 * 30,
2148+
axisLabel: {
2149+
showMinLabel: true,
2150+
showMaxLabel: true,
2151+
formatter(timestamp, _, opt) {
2152+
if (opt.break) {
2153+
// The third parameter is `useUTC: true`.
2154+
return formatTime(timestamp, '{HH}:{mm}\n{weak|{dd}d}', true);
2155+
}
2156+
return formatTime(timestamp, '{HH}:{mm}', true);
2157+
},
2158+
rich: { weak: { color: '#999' } },
2159+
},
2160+
breaks: _data.breaks,
2161+
breakArea: {
2162+
expandOnClick: false,
2163+
zigzagAmplitude: 0,
2164+
zigzagZ: 200,
2165+
itemStyle: { borderColor: 'none', opacity: 0 },
2166+
},
2167+
},
2168+
]}
2169+
yAxis={{ type: 'value', min: 'dataMin' }}
2170+
series={[{ type: 'line', symbolSize: 0, areaStyle: {}, data: _data.seriesData }]}
2171+
>
2172+
<Title title={{ text: 'Intraday Chart with Breaks', left: 'center' }} />
2173+
<Tooltip tooltip={{ show: true, trigger: 'axis', axisPointer: { type: 'cross' } }} />
2174+
<DataZoom
2175+
dataZoom={[
2176+
{ type: 'inside', minValueSpan: DATA_ZOOM_MIN_VALUE_SPAN },
2177+
{ type: 'slider', bottom: '30%', minValueSpan: DATA_ZOOM_MIN_VALUE_SPAN },
2178+
]}
2179+
/>
2180+
<AxisBreak />
2181+
</LineChart>
2182+
);
2183+
}

0 commit comments

Comments
 (0)