지난 포스팅은 xtype이 'cartesian'인 차트그래프에 대하여 알아보았습니다.차트 연동 및 'cartesian' 차트 관련 내용은 하단을 참고해 주세요 ^^2014/11/18 - [웹개발강좌/ExtJS] - ExtJS 강좌 - ExtJS5의 cartesian 타입 차트그래프 종류별로 출력해보기이번에는 xtype이 'polar'인 차트타입에 대하여 간..
이번에는 ExtJS5에서 제공되는 차트컴포넌트를 구현해보도록 하겠습니다.예전 ExtJS강좌의 첫번째 포스팅부분에서 extjs gpl 버전 다운받으신다음해당 압축해제 파일들을 삭제하지 말아달라고 요청드렸었죠?2014/10/18 - [웹개발강좌/ExtJS] - ExtJS 강좌 - ExtJS5를 이용한 설치 및 연동하기 편이제는 차트 구현을 하기위해서는이미 빌드..
이번장은간단하게 ExtJS에서 제공하는 Ajax에 대하여 포스팅 해보도록 하겠습니다.jQuery의 ajax를 접근해보셨던 분들이시면 쉽게 이해하실 수 있습니다.간단한 예를 들어서 설명을 진행하겠습니다.우선 ExtJS의 스크립트 태그는 다음과 같습니다. Ext.onReady(function(){ Ext.create('Ext.panel.Panel',{ ..
지난 포스팅은 xtype이 'cartesian'인 차트그래프에 대하여 알아보았습니다.
차트 연동 및 'cartesian' 차트 관련 내용은 하단을 참고해 주세요 ^^
2014/11/18 - [웹개발강좌/ExtJS] - ExtJS 강좌 - ExtJS5의 cartesian 타입 차트그래프 종류별로 출력해보기
이번에는 xtype이 'polar'인 차트타입에 대하여 간단하게 포스팅 해보도록 하겠습니다.
polar 차트 역시 다양한 종류가 존재하나 간단하게 원형차트와 레이더 차트에 대하여 알아보도록 하겠습니다
원형인 각 축과 반경축을 사용하는차트를 의미합니다.
제일먼저 원형차트에 대한 코드를 확인해보도록 하겠습니다.
데이터 스토어는 이전 그래프 관련 포스팅을 참고해주세요.
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 | Ext.create( 'Ext.panel.Panel' , { renderTo: Ext.getBody(), width: 650, height: 500, title : '방문자통계' , layout: 'fit' , items: [ { xtype: 'polar' , insetPadding: 50, innerPadding: 20, series: [{ type: 'pie' , angleField: 'count' , label: { field: 'date' , calloutLine: { length: 60, width: 3 } }, highlight: true , tooltip: { trackMouse: true , renderer: function (storeItem, item) { this .setHtml(storeItem.get( 'date' ) + '일: ' + storeItem.get( 'count' ) + '명' ); } } }], //데이터 출력 store: chartStore } ] }); |
polar 차트는 별도로 'series' 내의 X/Y 좌표 설정을 하지 않습니다.
대신 'series' 속성내에 'angleField' 와 'label' 속성의 'field' 속성으로 데이터스토어 데이터를 화면에 출력시킵니다.
'highlight' 속성은 마우스 오버기능시, 케이크 잘라서 나누는 효과(?) 를 나타내기 위하여 적용해보았습니다.
원형 차트내에서는 일자별로 출력이 되며 방문수는 원형 폭에 맞추어 출력이 되었습니다.
마우스 오버시 나누어 지는 효과는 highlight 속성으로 기능구현이 되었고 툴팁효과는 tooltip 속성으로 인하여 출력이 되었습니다.
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 | Ext.create( 'Ext.panel.Panel' , { renderTo: Ext.getBody(), width: 650, height: 500, title : '방문자통계' , layout: 'fit' , items: [ { xtype: 'polar' , insetPadding: '40 40 60 40' , interactions: [ 'rotate' ], axes: [{ type: 'numeric' , position: 'radial' , fields: 'count' , renderer: function (v) { return v + '명' ; }, minimum: 0, grid: true }, { type: 'category' , position: 'angular' , grid: true }], series: [{ type: 'radar' , xField: 'date' , yField: 'count' }], //데이터 출력 store: chartStore } ] }); |
보통 'polar' 그래프타입은 X/Y축이 없지만 레이더 차트는 XY 축을 선언합니다.
또한 interactions 속성을 통해서 출력된 그래프를 회전시킬수 있습니다.
레이더그래프는 회전하는다트판을 연상시키게 하는 그래프 종류인거 같습니다.
지금까지 ExtJS에서 지원되는 대표적인 기본 컴포넌트들에 대하여 알아보았습니다.
다음 포스팅은 MVC 구조로 ExtJS 실습을 진행하도록 하겠습니다.
by 개발로짜
ExtJS 강좌 - ExtJS5 MVC 구조 잡아보기(View+Controller 연동) (2) | 2014.11.26 |
---|---|
ExtJS 강좌 - Sencha CMD로 ExtJS 구조 생성하여 연동테스트 해보기 (1) | 2014.11.24 |
ExtJS 강좌 - ExtJS5의 cartesian 타입 차트그래프 종류별로 출력해보기 (0) | 2014.11.18 |
ExtJS 강좌 - Ajax 비동기 통신에 대하여 알아보자 (0) | 2014.11.13 |
ExtJS 강좌 - DATAVIEW를 이용하여 데이터 목록 출력해보기 (3) | 2014.11.12 |
이번에는 ExtJS5에서 제공되는 차트컴포넌트를 구현해보도록 하겠습니다.
예전 ExtJS강좌의 첫번째 포스팅부분에서 extjs gpl 버전 다운받으신다음
해당 압축해제 파일들을 삭제하지 말아달라고 요청드렸었죠?
2014/10/18 - [웹개발강좌/ExtJS] - ExtJS 강좌 - ExtJS5를 이용한 설치 및 연동하기 편
이제는 차트 구현을 하기위해서는
이미 빌드되어있는 폴더 하나를 프로젝트 경로에 추가하도록 하겠습니다.
"/extjs-5.0.x/build/packages/" 디렉토리를 보시면
다음과 같은 2가지 종류의 차트관련 폴더를 확인 하실 수 있으실 겁니다.
2종류의 차트의 차이점을 확인한 결과
ExtJS5이전버전인 ExtJS4.x 버전에 사용가능한 차트를 "ext-charts" 디렉토리에 빌드해놓았고
ExtJS5부터 신규로 빌들된 차트는 "sencha-charts" 디렉토리내에 빌드를 해놓았습니다.
확인결과 차트호출관련 xtype 만 별도로 차이를 두었을뿐 크게 차이가 나지는 않는것같습니다.
저희는 ExtJS5로 꾸준히 진행을 해왔으므로
"sencha-charts"디렉토리를 기존 ExtJS 테마들을 넣어놓은 디렉토리내에 INCLUDE 하도록 하겠습니다.
그럼 차트관련 JS파일을 기존 ExtJS JS/CSS 파일 INCLUDE되어있는
HTML/JSP/PHP 파일내에 INCLUDE 하도록 합니다.
1 | < script type = "text/javascript" src = "/extjs/sencha-charts/build/sencha-charts.js" ></ script > |
지원하는 차트 종류는 어마어마하게 많지만 자주 사용되는 일부차트컴포넌트만
일부 샘플로 제작하여 맛보기삼아서 만들어보도록 하겠습니다.
ExtJS의 차트컴포넌트 종류는 'cartesian' 타입과 'polar' 타입으로 나누어 볼 수 있겠는데
이번 포스팅은 'cartesian' 종류의 컴포넌트를 다루어 보도록 하겠습니다.
cartesian 차트란?
X/Y 좌표 두방향을 갖는 직교좌표입니다.
flipXY 속성으로 그래프 방향변경이 가능합니다.
샘플화면은 티스토리에서 기본적으로 제공하는 방문자수 그래프 데이터를 기준으로 예를 들어볼까 합니다
전체 샘플코드에서 동일한 데이터 스토어는 변수에 담아서 사용할 예정이므로
다음처럼 Ext.onReady 내에 정의해주세요
1 2 3 4 5 6 7 8 9 10 11 12 13 | var chartStore = Ext.create( 'Ext.data.Store' ,{ fields : [ 'date' , 'count' ], data : [ {date : '10' ,count : 305 }, {date : '11' ,count : 335 }, {date : '12' ,count : 329 }, {date : '13' ,count : 360 }, {date : '14' ,count : 298 }, {date : '15' ,count : 77 }, {date : '16' ,count : 99}, {date : '17' ,count : 130 } ] }) |
차트컴포넌트 관련코드 또한 Ext.onReady안에 정의해주세요
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 | Ext.create( 'Ext.panel.Panel' , { renderTo: Ext.getBody(), width: 650, height: 500, title : '방문자통계' , layout: 'fit' , items: [ { xtype: 'cartesian' , //위치 axes: [{ type: 'numeric' , position: 'left' , minimum: 0 }, { type: 'category' , position: 'bottom' }], //차트타입 series: { type: 'bar' , axis: 'left' , xField: 'date' , yField: 'count' , //그래프 내에 출력할 값 label: { field: 'count' , display: 'insideEnd' } }, //데이터 출력 store: chartStore } ] }); |
위에 보게되면 ExtJS 4.x 버전에서는 xtype : 'chart' 였었던 컴포넌트가 'cartesian' 이라고 변경이 되었습니다.
그리고 axes / series / store 속성은
차트컴포넌트에서 패키지로 따라다니는 속성들이라고 생각하시면 되겠습니다.
'axes' 속성의 경우, 가로/세로의 축을 정의해주는 속성이며
'series' 속성의 경우는 차트컴포넌트의 타입 및 각 화면에 출력하고자 하는 값들의 정의를 나타내는 속성입니다.
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 | Ext.create( 'Ext.panel.Panel' , { renderTo: Ext.getBody(), width: 650, height: 500, title : '방문자통계' , layout: 'fit' , items: [ //가로형 막대차트컴포넌트 { xtype: 'cartesian' , flipXY: true , //위치 axes: [{ type: 'numeric' , position: 'bottom' , minimum: 0 }, { type: 'category' , position: 'left' }], //차트타입 series: { type: 'bar' , xField: 'date' , yField: 'count' , //그래프 내에 출력할 값 label: { field: 'count' , display: 'insideEnd' } }, //데이터 출력 store: chartStore } ] }); |
가로형 막대그래프는 세로형과 다른점이 있다면
축설정 axes 속성에 position이 변경되었으며 flipXY 속성을 TRUE로 지정을 해주셔야
가로형으로 차트출력이 가능합니다.
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 | Ext.create( 'Ext.panel.Panel' , { renderTo: Ext.getBody(), width: 650, height: 500, title : '방문자통계' , layout: 'fit' , items: [ //라인형 차트 { xtype: 'cartesian' , //위치 axes: [{ type: 'numeric' , position: 'left' , minimum: 0 }, { type: 'category' , position: 'bottom' }], series: [{ type: 'line' , xField: 'date' , yField: 'count' , //결과값을 그래프에 출력하기 위한 속성 label: { field: 'count' , display: 'over' } }], //데이터 출력 store: chartStore } ] }); |
선형 그래프는 맨위에 티스토리 통계 이미지를 출력한 그래프와 동일한 화면구성을 해주는 그래프입니다.
"series" 속성의 type이 'line'으로 변경된 점과 label 속성으로 그래프에 출력시켜준 속성이 변경 혹은 추가되었습니다.
위와같이 출력이 되었으나 화면이 넘쳐서 label 부분에 대한
숫자값이 잘려보이는 현상이 발생합니다.
이 간격을 약간 조정을 해주기 위하여 "insetPadding","innerPadding" 속성을
다음처럼 xtype: 'cartesian', 다음라인에 추가해주도록 합니다
1 2 3 4 5 | insetPadding: 40, innerPadding: { left: 40, right: 40 }, |
위처럼 전체적으로 그래프사이즈가 줄어든 것을 확인하였습니다.
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 | Ext.create( 'Ext.panel.Panel' , { renderTo: Ext.getBody(), width: 650, height: 500, title : '방문자통계' , layout: 'fit' , items: [ { xtype: 'cartesian' , //============간격조정============ insetPadding: 40, innerPadding: { left: 40, right: 40 }, //============간격조정============ //위치 axes: [{ type: 'numeric' , position: 'left' , minimum: 0 }, { type: 'category' , position: 'bottom' }], series: [{ type: 'scatter' , xField: 'date' , yField: 'count' , tooltip: { trackMouse: true , renderer: function (storeItem, item) { this .setHtml(storeItem.get( 'date' ) + '일 : ' + storeItem.get( 'count' ) + ' 명' ); } } }], //데이터 출력 store: chartStore } ] }); |
분산형그래프 코드에서 기존 그래프 컴포넌트들과 차이라면
'series' 타입이 'scatter'이라는 점과 tooltip 속성이 추가되었다는 점입니다.
툴팁속성은 출력된 분산형 그래프에 마우스오버를 하게되면
해당 그래프에 대한 데이터 결과값이 툴팁처럼 출력이 되어 나타나는 속성입니다.
※ 툴팁은 타그래프에서도 사용가능한 기능입니다.
'cartesian' 타입의 마지막 샘플인 "영역형 그래프"에 대한 샘플코드를 보도록 하겠습니다.
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 | Ext.create( 'Ext.panel.Panel' , { renderTo: Ext.getBody(), width: 650, height: 500, title : '방문자통계' , layout: 'fit' , items: [ { xtype: 'cartesian' , //============간격조정============ insetPadding: 40, //============간격조정============ //위치 axes: [{ type: 'numeric' , position: 'left' , minimum: 0 }, { type: 'category' , position: 'bottom' }], series: [{ type: 'area' , xField: 'date' , yField: 'count' , //툴팁 tooltip: { trackMouse: true , renderer: function (storeItem, item) { this .setHtml(storeItem.get( 'date' ) + '일 : ' + storeItem.get( 'count' ) + ' 명' ); } } }], //데이터 출력 store: chartStore } ] }); |
지금까지 xtype이 'cartesian'인 차트 종류에 대하여 알아보았습니다.
다음 장에는 간단하게 xtype이 'polar'인 차트에 대하여 포스팅 해보도록 하겠습니다 .^^
by 개발로짜
ExtJS 강좌 - Sencha CMD로 ExtJS 구조 생성하여 연동테스트 해보기 (1) | 2014.11.24 |
---|---|
ExtJS 강좌 - ExtJS5의 polar 타입 차트그래프 간단하게 알아보기 (0) | 2014.11.18 |
ExtJS 강좌 - Ajax 비동기 통신에 대하여 알아보자 (0) | 2014.11.13 |
ExtJS 강좌 - DATAVIEW를 이용하여 데이터 목록 출력해보기 (3) | 2014.11.12 |
ExtJS 강좌 - 클릭이벤트를 적용하여 탭컴포넌트 동적으로 추가하기 (12) | 2014.11.08 |
이번장은 간단하게 ExtJS에서 제공하는 Ajax에 대하여 포스팅 해보도록 하겠습니다.
jQuery의 ajax를 접근해보셨던 분들이시면 쉽게 이해하실 수 있습니다.
간단한 예를 들어서 설명을 진행하겠습니다.
우선 ExtJS의 스크립트 태그는 다음과 같습니다.
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 | Ext.onReady( function (){ Ext.create( 'Ext.panel.Panel' ,{ title : 'AJAX 비동기 예제' , renderTo : Ext.getBody(), items : [{ xtype : 'textfield' , fieldLabel : '아이디' , id : 'user_id' },{ xtype : 'textfield' , fieldLabel : '제목' , id : 'title' }], fbar : [{ xtype : 'button' , text : '전송' , handler : function (btn){ var user_id = Ext.getCmp( "user_id" ).getValue(); var title = Ext.getCmp( "title" ).getValue(); Ext.Ajax.request({ url : '/submit.jsp' , method : 'POST' , params : { user_id : user_id, title : title }, success : function (response) { var result = Ext.JSON.decode(response.responseText); Ext.MessageBox.show({ title : '응답결과' , msg : '아이디:' +result.id+ ',제목:' +result.title, buttons : Ext.MessageBox.YES, icon : Ext.MessageBox.INFO }) }, failure : function (){ alert( "에러발생" ); } }); } }] }) }); |
위에서 기본패널에 텍스트 컴포넌트 2개와 하단툴바에 버튼 생성을 하였습니다.
버튼 클릭이벤트 발생 시점에 'Ext.Ajax.request' 를 이용하여 비동기 통신을 호출하게 됩니다.
'Ext.Ajax.request' 의 각 속성에 대한 설명은 다음과 같습니다.
url : 비동기 호출을 할 URL주소값입니다.
method : form태그의 method와 동일한 개념의 호출방식을 작성해주면 됩니다.
params : 비동기 호출 페이지에 넘겨줄 parameter 데이터 값입니다.
success : 성공
failure : 실패
속성을 보면 jQuery에서 지원하는 $.ajax 와 거의 동일한 구조입니다.
비동기 호출페이지인 submit.jsp 파일을 생성하여
다음처럼 JSON RESPONSE 하는 코드를 작성해보도록 하겠습니다.
JSON 파싱을위한 라이브러리는
기존과 동일한 json-simple 라이브러리를 이용하겠습니다.
2014/10/06 - [코드저장소/java] - JSON 라이브러리를 이용하여 object생성과 문자열을 object형으로 변환해보기
1 2 3 4 5 6 7 8 9 10 11 | String user_id = request.getParameter( "user_id" ); String title = request.getParameter( "title" ); JSONObject jsonObj = new JSONObject(); jsonObj.put( "id" , user_id); jsonObj.put( "title" , title); PrintWriter pw = response.getWriter(); pw.print(jsonObj); pw.flush(); pw.close(); |
위코드에서 알아보고자 한 부분은 사용자 페이지에서 전달받은 user_id와 title에 대한 값을 확인해보고
request받은 값들을 다시그대로 json 파싱하여 클라이언트 페이지로 response 해주는 샘플코드입니다.
실행결과를 한번 확인해보도록 하겠습니다.
정상적으로 Ajax 통신이 이루어진것을 확인하였습니다.
by 개발로짜
ExtJS 강좌 - ExtJS5의 polar 타입 차트그래프 간단하게 알아보기 (0) | 2014.11.18 |
---|---|
ExtJS 강좌 - ExtJS5의 cartesian 타입 차트그래프 종류별로 출력해보기 (0) | 2014.11.18 |
ExtJS 강좌 - DATAVIEW를 이용하여 데이터 목록 출력해보기 (3) | 2014.11.12 |
ExtJS 강좌 - 클릭이벤트를 적용하여 탭컴포넌트 동적으로 추가하기 (12) | 2014.11.08 |
ExtJS 강좌 - 마우스우클릭으로 contextmenu(컨텍스트메뉴) 띄워보기 (0) | 2014.11.08 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.