Highcharts是一款非常流行的JavaScript圖表庫(kù),它可以展示各種形式的數(shù)據(jù)。燭臺(tái)圖(Candlestick Chart)是一種專門用來(lái)展示股票等金融數(shù)據(jù)的圖表類型,可以直觀地展現(xiàn)開盤價(jià)、收盤價(jià)、最高價(jià)、最低價(jià)等信息。本文將介紹如何在Highcharts中使用燭臺(tái)圖來(lái)展示數(shù)據(jù),并給出具體的代碼示例。
一、準(zhǔn)備工作
在使用Highcharts之前,我們需要先引入Highcharts的JavaScript文件。可以通過CDN或者下載本地文件的方式引入,這里以CDN方式為例:
<script src="https://cdn.jsdelivr.net/npm/[email protected]/highcharts.js"></script>
登錄后復(fù)制
另外,為了方便展示數(shù)據(jù),這里使用了一個(gè)開源的JavaScript庫(kù)Faker.js,用來(lái)生成隨機(jī)數(shù)據(jù)。同樣可以通過CDN方式引入:
<script src="https://cdn.jsdelivr.net/npm/Faker.js"></script>
登錄后復(fù)制
二、創(chuàng)建容器
要展示Highcharts圖表,首先需要?jiǎng)?chuàng)建一個(gè)容器元素,通常是一個(gè)div標(biāo)簽,并指定一個(gè)ID,例如:
<div id="chart-container"></div>
登錄后復(fù)制
這里我們將圖表容器的ID設(shè)置為“chart-container”。
三、設(shè)置數(shù)據(jù)
在這里,我們需要生成一些假數(shù)據(jù)來(lái)展示燭臺(tái)圖。我們可以使用Faker.js庫(kù)來(lái)生成隨機(jī)數(shù)據(jù),然后將其格式化為Highcharts所需的數(shù)據(jù)格式。以下是一個(gè)生成100個(gè)數(shù)據(jù)點(diǎn)的示例:
let data = [];
for (let i = 0; i < 100; i++) {
let open = parseFloat(Faker.Finance.amount(1000, 5000));
let high = parseFloat(Faker.Finance.amount(open, open * 1.1));
let low = parseFloat(Faker.Finance.amount(open * 0.9, open));
let close = parseFloat(Faker.Finance.amount(low, high));
data.push([i, open, high, low, close]);
}
登錄后復(fù)制
以上代碼會(huì)生成一個(gè)包含100個(gè)數(shù)據(jù)點(diǎn)的數(shù)組,每個(gè)數(shù)據(jù)點(diǎn)都是一個(gè)包含五個(gè)值的數(shù)組,分別為數(shù)據(jù)點(diǎn)的索引、開盤價(jià)、最高價(jià)、最低價(jià)和收盤價(jià)。
四、創(chuàng)建燭臺(tái)圖
有了數(shù)據(jù)之后,我們就可以創(chuàng)建一個(gè)基本的燭臺(tái)圖了。以下是一個(gè)簡(jiǎn)單的示例代碼:
Highcharts.chart('chart-container', {
chart: {
type: 'candlestick'
},
title: {
text: '股票數(shù)據(jù)'
},
series: [{
data: data
}]
});
登錄后復(fù)制
以上代碼將會(huì)在“chart-container”容器中創(chuàng)建一個(gè)燭臺(tái)圖,數(shù)據(jù)采用之前生成的隨機(jī)數(shù)據(jù)。其中:
type: 'candlestick'指定了圖表類型為燭臺(tái)圖。title: { text: '股票數(shù)據(jù)' }設(shè)置了圖表標(biāo)題為“股票數(shù)據(jù)”。series: [{ data: data }]指定了數(shù)據(jù)系列,將之前生成的隨機(jī)數(shù)據(jù)設(shè)置為數(shù)據(jù)系列。
五、自定義樣式
默認(rèn)的燭臺(tái)圖樣式可能并不符合我們的需求,需求自定義樣式。以下是一個(gè)稍微復(fù)雜一些的示例代碼,可以實(shí)現(xiàn)更豐富的樣式效果:
Highcharts.chart('chart-container', {
chart: {
type: 'candlestick'
},
title: {
text: '股票數(shù)據(jù)'
},
xAxis: {
labels: {
formatter: function () {
return data[this.value][0];
}
}
},
yAxis: {
opposite: false,
labels: {
formatter: function () {
return '$' + this.value;
}
}
},
tooltip: {
pointFormat: '<span style="font-weight:bold">{series.name}</span><br>' +
'開盤價(jià): <b>${point.open}</b><br/>' +
'最高價(jià): <b>${point.high}</b><br/>' +
'最低價(jià): <b>${point.low}</b><br/>' +
'收盤價(jià): <b>${point.close}</b><br/>'
},
plotOptions: {
candlestick: {
color: '#0f0',
upColor: '#f00',
lineColor: '#000',
upLineColor: '#000',
lineWidth: 1
}
},
series: [{
name: '股票價(jià)格',
data: data
}]
});
登錄后復(fù)制
在以上代碼中,我們可以看到添加了以下內(nèi)容:
xAxis.labels.formatter屬性將X軸的標(biāo)簽設(shè)置為數(shù)據(jù)索引。yAxis.labels.formatter屬性將Y軸的標(biāo)簽設(shè)置為美元符號(hào),這里也可以根據(jù)實(shí)際需要進(jìn)行修改。tooltip.pointFormat屬性調(diào)整了提示框的格式,包含開盤價(jià)、最高價(jià)、最低價(jià)和收盤價(jià)等信息。plotOptions.candlestick屬性用于設(shè)置燭臺(tái)圖的樣式,這里我們指定了上漲和下跌的顏色和邊框顏色,并將線寬設(shè)為1。
六、總結(jié)
使用Highcharts展示燭臺(tái)圖并不是很復(fù)雜。首先我們需要準(zhǔn)備好數(shù)據(jù),然后創(chuàng)建一個(gè)容器元素指定ID,接著需要?jiǎng)?chuàng)建一個(gè)Highcharts實(shí)例并將容器ID傳入,最后設(shè)置數(shù)據(jù)、樣式、標(biāo)題等屬性即可。當(dāng)然,具體樣式的設(shè)置還需根據(jù)實(shí)際情況進(jìn)行調(diào)整。以下是完整的示例代碼:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="https://cdn.jsdelivr.net/npm/[email protected]/highcharts.js"></script> <script src="https://cdn.jsdelivr.net/npm/Faker.js"></script> <title>Highcharts展示燭臺(tái)圖示例</title> </head> <body> <div id="chart-container"></div> <script> let data = []; for (let i = 0; i < 100; i++) { let open = parseFloat(Faker.Finance.amount(1000, 5000)); let high = parseFloat(Faker.Finance.amount(open, open * 1.1)); let low = parseFloat(Faker.Finance.amount(open * 0.9, open)); let close = parseFloat(Faker.Finance.amount(low, high)); data.push([i, open, high, low, close]); } Highcharts.chart('chart-container', { chart: { type: 'candlestick' }, title: { text: '股票數(shù)據(jù)' }, xAxis: { labels: { formatter: function () { return data[this.value][0]; } } }, yAxis: { opposite: false, labels: { formatter: function () { return '$' + this.value; } } }, tooltip: { pointFormat: '<span style="font-weight:bold">{series.name}</span><br>' + '開盤價(jià): <b>${point.open}</b><br/>' + '最高價(jià): <b>${point.high}</b><br/>' + '最低價(jià): <b>${point.low}</b><br/>' + '收盤價(jià): <b>${point.close}</b><br/>' }, plotOptions: { candlestick: { color: '#0f0', upColor: '#f00', lineColor: '#000', upLineColor: '#000', lineWidth: 1 } }, series: [{ name: '股票價(jià)格', data: data }] }); </script> </body> </html>
登錄后復(fù)制






