You are looking for information, articles, knowledge about the topic nail salons open on sunday near me highcharts 사용법 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://chewathai27.com/to team, along with other related topics such as: highcharts 사용법 Highcharts 예제, Highchart 설치, 하이차트 옵션, Highchart 데이터, 하이차트 무료, 하이차트 타입, Highchart 그래프, Highchart 라이센스
- 1. Highcharts 이란 …
- Highcharts 설치 …
- Highcharts 생성 …
- 1. 각 하드웨어 차트 그리기 …
- 차트 유형 line -> bar 변경 가능 …
- 최대치 기준 …
- Bytes 단위 변환 …
- 데이터 단위 자동변환
하이차트 (Highcharts) 사용하기
- Article author: coor.tistory.com
- Reviews from users: 39424 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about 하이차트 (Highcharts) 사용하기 Updating …
- Most searched keywords: Whether you are looking for 하이차트 (Highcharts) 사용하기 Updating 들어가며 장비 모니터링 시스템에서 프로세스 상세 정보를 보고자 하는 대상 장비에 대한 전체 프로세스, CPU, Memory, I/O 모니터링이 보기 위해서 시각적으로 한눈에 들어오는 라이브러리..
- Table of Contents:
들어가며
1 Highcharts 이란
2 Highcharts 설치
3 Highcharts 생성
1 각 하드웨어 차트 그리기
2 차트 유형 line – bar 변경 가능
3 최대치 기준
4 Bytes 단위 변환
5 데이터 단위 자동변환
6 문제점 및 해결
관련글
댓글0
공지사항
최근글
인기글
최근댓글
태그
전체 방문자
티스토리툴바
[3분] Highchart 사용해보기(1)
- Article author: brunch.co.kr
- Reviews from users: 32172 Ratings
- Top rated: 3.1
- Lowest rated: 1
- Summary of article content: Articles about [3분] Highchart 사용해보기(1) Three.js, Chart.js, Metric-Graphics, Recharts, Raphael 등 많은 라이브러리가 있지만 가장 많이 사용되는 것은 여전히 D3.js다. 하지만 D3.js는 자유도 … …
- Most searched keywords: Whether you are looking for [3분] Highchart 사용해보기(1) Three.js, Chart.js, Metric-Graphics, Recharts, Raphael 등 많은 라이브러리가 있지만 가장 많이 사용되는 것은 여전히 D3.js다. 하지만 D3.js는 자유도 … 데이터 시각화 툴 중 가장 간편한 highchart의 기본기 | 웹 기반의 가장 대표적인 시각화 라이브러리는 D3.js다. 많은 웹 개발자들과 디자이너들이 높은 자유도를 갖고 있는 D3.js를 활용해 효율적으로 데이터를 전달한다. Three.js, Chart.js, Metric-Graphics, Recharts, Raphael 등 많은 라이브러리가 있지만 가장 많이 사용되는 것은 여전히 D3.js다. 하지만 D3.js
- Table of Contents:
Hichart의 기본 스크립트
Hichart를 그리기 위해서 태그에 id 부여하기
Highchart 기본 사용법 | Gracefullight
- Article author: gracefullight.dev
- Reviews from users: 23075 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about Highchart 기본 사용법 | Gracefullight D3.js 로 그래프를 만들 수 있지만 더 사용성이 좋은 highchart 로 데이터를 시각화해보자 설치1234# npm$ npm install highcharts –save# yarn$ … …
- Most searched keywords: Whether you are looking for Highchart 기본 사용법 | Gracefullight D3.js 로 그래프를 만들 수 있지만 더 사용성이 좋은 highchart 로 데이터를 시각화해보자 설치1234# npm$ npm install highcharts –save# yarn$ … D3.js 로 그래프를 만들 수 있지만 더 사용성이 좋은 highchart 로 데이터를 시각화해보자 설치1234# npm$ npm install highcharts –save# yarn$ yarn add highcharts highcharts.min.js와 modules/exporting.js, themes/grid-light.js 를
- Table of Contents:
소스
결과
[Library-Highcharts] Highcharts 사용방법
- Article author: codingmomong.tistory.com
- Reviews from users: 26338 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about [Library-Highcharts] Highcharts 사용방법 $(function () { Highcharts.chart(‘container’, { title: { text: ‘Monthly Average Temperature’, x: -20 //center }, subtitle: { text: ‘Source: … …
- Most searched keywords: Whether you are looking for [Library-Highcharts] Highcharts 사용방법 $(function () { Highcharts.chart(‘container’, { title: { text: ‘Monthly Average Temperature’, x: -20 //center }, subtitle: { text: ‘Source: … HIghCharts란? 순수 JavaScript로 작성된 차트 작성용 소프트웨어 라이브러리 HighCharts 홈페이지 www.highcharts.com/ Interactive JavaScript charts for your webpage | Highcharts “I absolutely LOVE Highch..차근차근 개발 일기
- Table of Contents:
HIghCharts란
HighCharts 홈페이지
Download
DEMO
Example
티스토리툴바
[Highcharts] 하이차트 그래프 기본 옵션으로디자인 예쁘게 변경하기 – (6~7 종류 차트 + 자주사용하는 옵션)
- Article author: equality37.tistory.com
- Reviews from users: 45107 Ratings
- Top rated: 3.7
- Lowest rated: 1
- Summary of article content: Articles about [Highcharts] 하이차트 그래프 기본 옵션으로디자인 예쁘게 변경하기 – (6~7 종류 차트 + 자주사용하는 옵션) 데이터 시각화를 위한 차트 플러그인 중 가장 오래, 많이 사용 해왔던 차트가 highcharts 입니다. 저희 회사에선 2년전까지만 해도 개발자들이 직접 … …
- Most searched keywords: Whether you are looking for [Highcharts] 하이차트 그래프 기본 옵션으로디자인 예쁘게 변경하기 – (6~7 종류 차트 + 자주사용하는 옵션) 데이터 시각화를 위한 차트 플러그인 중 가장 오래, 많이 사용 해왔던 차트가 highcharts 입니다. 저희 회사에선 2년전까지만 해도 개발자들이 직접 … 데이터 시각화를 위한 차트 플러그인 중 가장 오래, 많이 사용 해왔던 차트가 highcharts 입니다. 저희 회사에선 2년전까지만 해도 개발자들이 직접 구현을 하였고, 저는 폰트, 색상 등 디자인과 최대한 비슷하게..
- Table of Contents:
하이차트 사용법
- Article author: intellegibilisverum.tistory.com
- Reviews from users: 34726 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about 하이차트 사용법 CDN */ /* NPM */ > npm install highcharts –save /* NPM */ > npm install highcharts –save
3. Highcharts 생성
import React, { Component } from “react”; import Highcharts from “highcharts”; const defaultOptions = { chart: { width: 1560, height: 250, }, legend: { layout: “horizontal”, maxHeight: 40, borderWidth: 1, backgroundColor: “#FFFFFF”, }, xAxis: { crosshair: true, categories: [], }, yAxis: { title: { text: null, }, min:0 }, plotOptions: { line: { marker: { enabled: false, }, }, }, series : [{ data:[12,12,52,2] }], legend: { align: “right”, verticalAlign: “top”, layout: “vertical”, x: 0, y: 100, }, }; class ChartComponent extends Component { componentDidMount() { this.chart = Highcharts.chart(this.container, defaultOptions); } render() { return
(this.container = container)}>; } }
차트를 생성하기 위해서 Highchart 속성을 이용해 데이터를 넣거나 스타일을 할 수 있다.
여러가지 속성을 있기 때문에 defaultOptions 변수에 담아준다.
만약 라인을 한 개 더 추가하고 싶다면
series : [{
name: ‘Test 1’,
data:[12,12,52,2]
},
name: ‘Test 2’,
data:[20,40,60,80]
}]
지금까지 기본적인 사용법에 대해 알아보았다.
이제 차트를 통해 모니터링 시스템에 적용시켜보겠습니다.
차트 요구사항은
1. 각 하드웨어 차트 그리기
2. 차트 유형 line -> bar 변경 가능
3. 최대치 기준
4. Bytes 단위 변환
5. 데이터 단위 자동 변환
1. 각 하드웨어 차트 그리기
let chartObj = {}; let chartOptions = { chart: { type: ‘line’, width: 1560, height: 250, }, title: { text: null, align: ‘left’, style: { fontSize: “12px” } }, xAxis: { categories: [], labels: {align:’center’} }, series: [ { data: [], name: ” } ], yAxis: { title: { text: ” }, min:0, } };
차트를 그리기 전 차트 크기, line 선 색깔, border 길이, x축 y축 max min, tooltip style 등
고정된 값을 설정하고 동적으로 데이터를 들어가야 하는 부분은 넣지 않았다.
_. forEach(selectedDevice , (dobj, dkey) => { // 선택된 하드웨어 장비 _.forEach(selectedResource, (obj, key) => { // 선택된 자원 let categoryAry = []; let valueAry = []; if(obj.resourceName === ‘CPU Processor (%)’) { _.forEach(data[obj.resourceKey], (iobj) => { categoryAry.push(_.replace(iobj.generateTime, ‘T’, ‘ ‘)); valueAry.push(iobj.cpuProcessor); }); chartOptions.title.text = ‘‘+obj.resourceName+’ / ‘+startDate+’∽’+endDate+’, ‘+dobj.equipment; chartOptions.xAxis.categories = categoryAry; chartOptions.yAxis = {max:100, tickInterval:20 } chartOptions.series[0].data = valueAry; chartOptions.series[0].name = dobj.equipment; chartObj.option = chartOptions; chartObj.percentMaxType = true; chartObj.key = “chart_”+key+’_’+dkey } this.setState({ chartData:chartData, loader:false }) else if(obj.resourceName === ‘CPU Used (%)’) { ………..생략 } } }
현재 코드는 하드웨어 이름을 체크하여 서버에서 넘어온 컬럼 값을 맞추어서 동적으로 데이터를 넣는 코드이다.
하드웨어 종류가 많을수록 각 차트의 고유한 키 값을 넣어주기 위해
선택된 장비(key) + 선택된 자원(dkey) 값을 넣어서 혼동되지 않게 해주었다.
시간 -> generateTime , 데이터 -> cpuProcessor
2. 차트 유형 line -> bar 변경 가능
/* line , bar 변경 */ changeChartType = (e, obj, i) => { let chartOptions = _.cloneDeep(this.state.chartData); chartOptions[i].option.chart.type = e.target.value; this.setState({ chartData: chartOptions }); } // render
유형은 바꾸는 건 간단하다.
사용자가 bar를 선택하면 e.target.value 값을 chart.type = bar 넣어주고 setState 해주면 된다.
3. 최대치 기준
/* 최대치 기준 */ maxStandred = (e, obj , i) => { let chartOptions = _.cloneDeep(this.state.chartData); if(e.target.checked === true) { chartOptions[i].option.yAxis.max = Math.max(…chartOptions[i].option.series[0].data); chartOptions[i].option.yAxis.tickInterval = null; } else { chartOptions[i].option.yAxis.max = 100; chartOptions[i].option.yAxis.tickInterval = 20; } this.setState({ chartData: chartOptions }); } // render this.maxStandred(e, obj , i)} className=”reportChartInput” />
데이터가 0~5 낮은 데이터일 경우 선이 보이지 않는 불편함이 있다.
최대치 기준은 낮은 데이터 중에서 제일 높은 값을 y축의 max 값을 설정하여
차트의 데이터가 명확하게 보여주는 이점이 있다.
max 값을 알기 위해 Math.max 사용하였다.
4. Bytes 단위 변환
차트는 두 가지 유형으로 나뉘어 있다.
퍼센트 차트와 바이트 차트가 있다.
데이터의 단위는 바이트(Byte), 킬로바이트(KB), 메가바이트(MB), 기가바이트(GB), 테라바이트(TB) 등등 있다.
/* bytes 단위 변경 */ changeByteVal(type, size, decimals = 2) { let result = {}, selectFix = 0, selectVal = 0; const dm = decimals < 0 ? 0 : decimals; if (size === 0) return '0'; else { if(type == 'bps' || type == 'pps') { selectVal = 8; } else if(type == 'B' || type == 'B/s') { selectVal = 1; } else if(type == 'KB' || type == 'KB/s' || type == 'Kbps' || type == 'Kpps') { selectVal = 1024; selectFix = 3; } else if(type == 'MB' || type == 'MB/s' || type == 'Mbps' || type == 'Mpps') { selectVal = 1048576; selectFix = 6; } else if(type == 'GB' || type == 'GB/s' || type == 'Gbps' || type == 'Gpps') { selectVal = 1073741824; selectFix = 9; } if(selectVal < 10) { size = parseFloat(size * selectVal); } else { selectFix = size / selectVal > 1 ? 2 : selectFix; size = size / selectVal === 0 ? 0 : parseFloat((size / selectVal)).toFixed(selectFix); } size = parseFloat(size).toFixed(dm); result.value = Number(size); } return result; }
현재 매게 변수에 들어오는 size는 바이트 단위이다.
각 데이터 단위에 맞게 나누거나 곱하여 값을 리턴하고 있다.
소수점의 길이를 따로 지정하지 않으면 길어지기 때문에 toFixed(number) 지정해준다.
ex) 192.233635251 => 192.23
/* 타입 변환 */ changeByteType = (e, obj, i) => { let chartOptions = _.cloneDeep(this.state.chartData); let valueAry = []; if(chartOptions[i].resourceName === ‘Memory Bytes’ || chartOptions[i].resourceName === ‘Memory Cached Bytes’ || chartOptions[i].resourceName === ‘Memory Swap Bytes’ || chartOptions[i].resourceName === ‘Disk Total Used Bytes’ || …생략) { _.forEach(chartOptions[i].originValueAry, (val) => { valueAry.push(this.changeByteVal(e.target.value, val).value); }); chartOptions[i].byteVal = e.target.value; chartOptions[i].option.series[0].data = valueAry; } this.setState({ chartData: chartOptions }); } // render
퍼센트 차트는 단위 변환이 없기 때문에 조건문을 통해 단위 차트만 변경이 이루어질 수 있게 나누어준다.
this.changeByteVal에서 변환된 데이터를 다시 series[0].data 넣어준다.
setState으로 rerendering 통해 변경된 데이터의 차트가 완성된다.
5. 데이터 단위 자동변환
/* 단위 자동 변경 */ autoConvertByte(obj,size, decimals = 2) { let result = {}; if (size === 0) { result.value = 0; return result; } const dm = decimals < 0 ? 0 : decimals; if(obj.resourceName === 'NIC Discards' || obj.resourceName === 'NIC Errors') { const k = 2048; const sizes = ['Kpps', 'Mpps', 'Gpps', 'Tpps', 'Ppps', 'Epps', 'Zpps', 'Ypps']; const i = Math.floor(Math.log(size) / Math.log(k)); result.value = parseFloat((size / Math.pow(k, i)).toFixed(dm)); result.unit = sizes[i]; } else if(obj.resourceName === 'Network Traffic' || obj.resourceName === 'Network PPS') { const k = 2048; const sizes = ['Kbps', 'Mbps', 'Gbps', 'Tbps', 'Pbps', 'Ebps', 'Zbps', 'Ybps']; const i = Math.floor(Math.log(size) / Math.log(k)); result.value = parseFloat((size / Math.pow(k, i)).toFixed(dm)); result.unit = sizes[i]; } else if(obj.resourceName === 'Disk I/O Bytes') { const k = 1024; const sizes = ['B/s', 'KB/s', 'MB/s', 'GB/s', 'TB/s', 'PB/s', 'EB/s', 'ZB/s', 'YB/s']; const i = Math.floor(Math.log(size) / Math.log(k)); result.value = parseFloat((size / Math.pow(k, i)).toFixed(dm)); result.unit = sizes[i]; } else { const k = 1024; const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(size) / Math.log(k)); result.value = parseFloat((size / Math.pow(k, i)).toFixed(dm)); result.unit = sizes[i]; } return result; }; 차트에서 데이터가 574946913328bytes 이면 방대한 숫자이기 때문에 사람이 읽을 수 없다. 574946913328bytes를 읽을 수 있는 단위로 바꾸면 66.93GB 이다. 현재 서버에서 넘어오는 값은 bytes 단위이기 때문에 읽을 수 있는 단위로 바꿔줘야 한다. Network 단위는 초 단위가 붙기 때문에 조건문을 나누어서 실행하였다. 나머지는 바이트 차트 단위는 else { } 실행된다. 6. 문제점 및 해결 차트가 1개... 10개... 30개가 있을 때 유형 변경, 단위 변경, 최대치 기준 등 이벤트가 발생하면 setState 실행하면서 전체 렌더링이 된다. 그러면 차트가 그려질 때 애니메이션이 실행돼서 30개 차트가 다 애니메이션이 실행된다. 그로 인해 문제점은 성능이 엄청 떨어진다. 해결 방법은 함수형 컴포넌트의 훅을 이용해서 개별 렌더링을 하는 방법이 있지만 현재 클래스 컴포넌트를 사용하기 때문에 훅을 사용할 수 없었다. 그렇다고 lifecycle method에서 개별 렌더링을 지원해주는 메서드는 없었다. 이제는 클래스 컴포넌트 시대는 끝났다. 공식문서를 보면 함수형 컴포넌트를 권장한다. // chartComponent.js _.map(chartData, (obj, i) => (
)) // realChart.js componentDidMount() { const options = Highcharts.merge(defaultOptions, this.props.option); this.chart = Highcharts.chart(this.container, options); } componentWillUnmount() { this.chart.destroy(); } componentDidUpdate(prevProps) { if (this.props.option !== prevProps.option) { this.chart.update(this.props.option); } } render() { return (this.container = container)}>; }
일단 차트를 그리는 컴포넌트에서 차트를 그리지 않고 정말 차트를 그리는 부분만 컴포넌트를 한 개 더 생성한다.
Highcharts.merge( ) 이용하여 기본 설정값 + 넘어온 데이터를 합친다.
합친 데이터는 다시 chart를 그리게 되면서 전체 렌더링이 되지 않고 이벤트 발생한 차트만 변경된다.
[3분] Highchart 사용해보기(1)
웹 기반의 가장 대표적인 시각화 라이브러리는 D3.js다. 많은 웹 개발자들과 디자이너들이 높은 자유도를 갖고 있는 D3.js를 활용해 효율적으로 데이터를 전달한다. Three.js, Chart.js, Metric-Graphics, Recharts, Raphael 등 많은 라이브러리가 있지만 가장 많이 사용되는 것은 여전히 D3.js다.
하지만 D3.js는 자유도가 높은 만큼 배우기 어렵다는 단점이 있다. 이 부분에서 highchart는 굉장히 매력적이다. 자바스크립트를 어느 정도 사용해보았다면 highchart로 간단한 그래프를 그리는 데는 채 10분이 걸리지 않는다.
Hichart의 기본 스크립트
highchart를 사용하기 위해서는 다른 라이브러리와 마찬가지로 CDN으로 외부에서 스크립트를 불러오거나 로컬(본인의 컴퓨터)에서 직접 불러와야 한다.
highchart에서 사용하는 스크립트는 크게 아래 네 가지다.
1.
위의 스크립트는 기본적인 highchart의 기능을 모두 담고 있다.
*필수적으로 불러와야 한다.
2.
데이터에 라벨을 붙이기 위한 스크립트로 라벨링을 해야 하는 경우 필수적으로 불러와야 한다.
3.
highchart로 생성한 그래프를 jpg, png 등의 이미지 확장자로 다운로드할 수 있게 만든 스크립트이다.
4.
highchart로 그래프를 생성할 때 사용한 데이터 파일을 csv 등의 확장자로 다운로드할 수 있게 만든 스크립트이다. 외부 사용자들이 데이터를 다운로드할 있게 하는 경우에만 사용한다.
정리하자면 1번, 2번 스크립트는 필수적으로 호출하며, 3번과 4번은 해당 기능이 필요한 경우에 부가적으로 호출하면 된다.
Hichart를 그리기 위해서 태그에 id 부여하기
Highchart로 그래프를 그리기 위해서는 태그에 id값을 부여해야 한다. CSS 선택자를 위해서 id값을 입력하는 것과 똑같다.
예)
* highchart로 그릴 그래프의 너비와 폭은 id값을 부여받은 태그의 값을 상속받는다. 따라서 CSS 코드에서 해당 id의 width와 min, max height값을 미리 정하여주는 것이 좋다.
예) #graph-container-01 {
width:300px;
height:500px;
}
이제 별도의 스크립트 파일을 만들고 highchart의 docs를 활용해서 그래프를 그려보자.
highchart의 JSfiddle 예시를 조금 수정하였다.
Highcharts.chart(‘graph-container-01’, {
title: {
text: ‘Solar Employment Growth by Sector, 2010-2016’
},
subtitle: {
text: ‘Source: thesolarfoundation.com’
},
yAxis: {
title: {
text: ‘Number of Employees’
}
},
legend: {
layout: ‘vertical’,
align: ‘right’,
verticalAlign: ‘middle’
},
series: [{
name: ‘Installation’,
data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]
}, ],
});
위트 코드를 입력하면, 아래와 같은 그래프가 그려진다.
Title, Subtitle 등의 객체와 속성 값은 쉽게 이해할 수 있을 것이다. Series만 살펴보자.
기본적으로 Series에는 데이터 셋을 넣는다. 현재 들어간 데이터 셋은 하나로 이름은 ‘Installation’이고 값은 배열 형태로 [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]를 갖고 있다.
만약 라인을 하나 더 그리고 싶다면 하나 더 추가를 하면 된다. 아래와 같이.
series: [{
name: ‘Installation’,
data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]
}, {
name: ‘Manufacturing’,
data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434]
},
추가로 본래는 그래프 타입을 따로 입력해야 하지만, 본 예제에는 없다.
그 이유는 디폴트로 라인 차트를 지원하기 때문.
다른 그래프 형태는 다음 포스팅에서 더 깊게 다루도록 하겠다.
본 예제의 원본을 보고 싶다면 아래 JS fiddle을 참고하기 바란다.
https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/demo/line-basic/
Highchart 기본 사용법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Highcharts . setOptions ({
lang : {
resetZoom : ‘전체보기’ ,
},
});
var chartCallback = function ( data ) {
var chart = $( ‘#chart’ ). highcharts ();
if (chart) {
chart. destroy ();
}
if (data) {
var categoriesData = [];
var seriesData = {};
var options = {
chart : {
renderTo : ‘chart’ ,
zoomType : ‘x’ ,
panning : true ,
panKey : ‘shift’ ,
},
title : {
text : null ,
},
xAxis : {
categories : categoriesData,
},
yAxis : {
min : 0 ,
allowDecimals : false ,
title : {
text : null ,
},
labels : {},
},
credits : {
text : ‘Graceful Light’ ,
href : ‘https://gracefullight.github.io’ ,
},
tooltip : {
shared : true ,
pointFormatter : function ( ) {
if ( this . y >= 0 ) {
return (
‘● ‘ +
this . series . name +
‘: ‘ +
‘‘ +
Utils . comma ( this . y ) +
‘
‘);
}
},
},
plotOptions : {
column : {
pointPadding : 0.2 ,
borderWidth : 0 ,
},
},
legend : {
borderWidth : 0 ,
},
series : seriesData,
};
chart = new Highcharts . Chart (options);
chart. redraw ();
} else {
$( ‘#chart’ ). html ( ‘no data’ );
}
};
So you have finished reading the highcharts 사용법 topic article, if you find this article useful, please share it. Thank you very much. See more: Highcharts 예제, Highchart 설치, 하이차트 옵션, Highchart 데이터, 하이차트 무료, 하이차트 타입, Highchart 그래프, Highchart 라이센스