Chart

FusionChart

컴포넌트 설명

요약

FusionChart는 다양한 Device, Browser, Platform에서 작동하는 JavaScript기반 차트입니다. WebSquare5는 FusionChart 기능을 사용할 수 있는 환경을 제공합니다.

지원 브라우저

거의 모든 브라우저를 지원합니다. 단, flash 렌더링 시 flash를 지원하지 않는 브라우저는 지원하지 않습니다.

  • Internet Explorer 6/7/8/9/10/11

  • Chrome

  • Safari

  • Opera

  • Firefox

차트 종류

  • 선형 차트 (line chart)

  • 세로막대차트 (2D/3D Column Chart)

  • 영역차트 (Area Chart)

  • 가로막대차트 (2D/3D Bar Chart)

  • 원형차트 (2D/3D Pie Chart)

  • 도우넛차트(2D/3D Doughnut Chart)

  • 스텍차트 (Stacked Chart)

  • 조합차트(Combination Chart)

  • 스크롤차트(Scroll Chart)

  • 버블차트(Bubble Chart)

  • xy(Scatter)차트 (xy Chart) SSGrid

지원 데이터

  • json

  • xml (FusionChart native API 이용)

YouTube 동영상

FusionChart

버전

2023년 5월 이후 릴리즈되는 엔진은 아래와 같이 3.15 및 3.19 두 개의 버전만 지원합니다.

그리기

  1. FusionChart에 id, chartType, drawType을 설정하여 차트를 만듭니다.

<w2:fusionchart id="chartTest" style="position: absolute ;left: 480px;top: 150px; width:430px; height: 300px;" chartType="Column2D"  drawType="javascript"></w2:fusionchart>
  1. 아래와 같이 setJSONData() API를 이용하여 차트 데이터를 설정하십시오. (FusionChart는 xml과 json 데이터를 지원하며, WebSquare5는 json 데이터를 지원하기 때문.)

$r_title(사용 예)
var jsonData = {
    "data": [{
            "value": "490000",
            "label": "China"
        },
        {
            "value": "340000",
            "label": "USA"
        },
        {
            "value": "160000",
            "label": "Brazil"
        },
        {
            "value": "220000",
            "label": "Spain"
        },
        {
            "value": "123000",
            "label": "India"
        }
    ]
};

//차트에 데이터를 셋팅합니다.
chartTest.setJSONData(jsonData);
  1. 아래와 같이 차트가 그려지는지 확인합니다. (WebSquare5 기본 스타일 적용된 상태)

FusionChart

차트 Customizing

FusionChart는 기본적으로 데이터와 스타일 옵션들이 결합되어 있는 형태입니다.


차트에 거의 모든 부분을 접근하여 스타일을 변경할 수 있습니다. (JavaScript 랜더링시 지원하지 않는 부분도 있음.)


차트 종류는 44가지이며 차트마다 옵션과 API가 조금씩 다릅니다.


FusionChart 공식 홈페이지 documents에 각각의 차트마다 specification sheet에서 옵션과 API를 확인하실 수 있습니다.

관련 API

configure(): chart에 표시되는 메세지를 변경합니다.

setChartAttribute(): chart element에 들어가는 Attribute를 설정합니다. (caption, yaxisname)

setPlotColor(): chart에 Data Plot의 색상을 지정합니다.

addTrendLine(): chart에 trendLine(가로줄)을 그립니다.

addVTrendLine(): chart에 vtrendLine(세로줄)을 그립니다. (Scatter/Bubble/Zoom Line Chart에서만 지원)

applyStyle(): chart에 Style을 지정합니다. (animation, font, glow, bevel)

다음은 위의 API를 사용하여 옵션을 설정한 예입니다.

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:w2="http://www.inswave.com/websquare" xmlns:xf="http://www.w3.org/2002/xforms">
	<head>
		<w2:buildDate />
		<xf:model>
			<xf:instance>
				<data xmlns="" />
			</xf:instance>
		</xf:model>
		<script type="javascript"><![CDATA[ 
		
		    var jsonData = {
	
		      "data": [
		        {
		          "value": "490000",
		          "label": "China"
		        },
		        {
		          "value": "340000",
		          "label": "USA"
		        },
		        {
		          "value": "160000",
		          "label": "Brazil"
		        },
		        {
		          "value": "220000",
		          "label": "Spain"
		        },
		        {
		          "value": "123000",
		          "label": "India"
		        }
		      ]
		  };
        // setJSONData API를 이용하여 데이터를 셋팅하기 이 전에  차트 옵션들을 셋팅해야 합니다		 

        // 차트가 draw되기 전에 customizing 함수를 사용합니다.
        // chart element에 들어갈 옵션 입니다.
        var options = {  caption : "전세계 판매량 요약", 
                                    subCaption : "2006년 동안", 
                                    yAxisName : " 금액 ",
                                    xAxisName : " 나라 ", 
                                    numberPrefix:"$" };

        chartTest.setChartAttribute(options);

       // trendLine 옵션입니다.
       var lineOptions = {  startValue: "220000", 
		     color: "00cc00",
		     displayValue: "평균" };

       chartTest.addTrendLine(lineOptions);

       // 스타일옵션입니다.
       var styleOptions = { color : "2a5900",
		           size : "20", 
		           bold : "1",
		           underline : "1"};

        chartTest.applyStyle("font", "captionFont", styleOptions, ["Caption"]);
       
        // 실제 데이터를 셋팅합니다.  차트가 그려집니다. 
        chartTest.setJSONData(jsonData);

        ]]></script>
	</head>
	<body>
		<w2:fusionchart id="chartTest" style="position: absolute ;left: 480px;top: 150px; width:430px; height: 300px;" chartType="Column2D" drawType="javascript">
		</w2:fusionchart>
	</body>
</html>

옵션이 적용된 차트

데이터 구조

FusionChart는 xml과 json을 지원합니다.

차트에 따라 데이터 구조가 single series , multi series 등이 존재합니다.

아래 데이터에 빨간색부분은 chart의 여러 속성을 지정할 수 있는 영역입니다.

예를 들어 차트에 Caption을 넣어 싶다면 아래를 추가 하십시오.

Caption : "test Caption"(json)

혹은

Caption="test Caption"

Chart 영역에 들어가는 여러 속성들은 차트마다 조금씩 다르며 FusionChart에서 제공하는 chart Specification sheet을 보고 원하시는 옵션을 setChartAttribute() API로 추가하십시오.

WebSquare5 서버에서 복잡한 구조의 차트 데이터를 만들어 내려주는 것은 효율적이지 않습니다. 따라서 아래와 같이 실제 차트에 보여질 데이터만 내려받아 차트 옵션과 색상 등을 API로 추가하여 화면으로 보여주는 방식을 권장합니다.

Single-series

$r_title(json 구조)
{
    "chart": {},
    "data": [{
            "label": "Alex",
            "value": "25000"
        },
        {
            "label": "Mark",
            "value": "35000"
        },
        {
            "label": "David",
            "value": "42300"
        },
        {
            "label": "Graham",
            "value": "35300"
        }
    ]
}
$r_title(xml 구조)
<chart >
    <set label="Alex" value="25000" />
    <set label="Mark" value="35000" />
    <set label="David" value="42300" />
    <set label="Graham" value="35300" />
</chart>

Multi-series

$r_title(json 구조)
{
    "chart": {},
    "categories": [{
        "category": [{
                "label": "January"
            },
            {
                "label": "February"
            },
            {
                "label": "March"
            }
        ]
    }],
    "dataset": [{
            "seriesname": "Product A",
            "data": [{
                    "value": "8343"
                },
                {
                    "value": "6983"
                },
                {
                    "value": "7658"
                }
            ]
        },
        {
            "seriesname": "Product B",
            "data": [{
                    "value": "2446"
                },
                {
                    "value": "3935"
                },
                {
                    "value": "3452"
                }
            ]
        }
    ]
}
$r_title(xml 구조)
<chart>
    <categories>
        <category label="January" />
        <category label="February" />
        <category label="March" />
    </categories>
    <dataset seriesname="Product A" >
        <set value="8343" />
        <set value="6983" />
        <set value="7658" />
    </dataset>
    <dataset seriesname="Product B" >
        <set value="2446" />
        <set value="3935" />
        <set value="3452" />
    </dataset>
</chart>

위의 두 가지 이외의 데이터 구조는 FusionCharts documents의 FusionCharts XT Data Formats 섹션을 확인하십시오.

데이터 바인딩

차트 Properties 이용

ref

FusionChart와 DataCollection 데이터 연동 시 사용.
DataCollection을 설정.
labelNode / seriesColumns 옵션과 함께 사용.

labelNode

FusionChart의 series 데이터로 사용할 DataCollection column. 
공백일 경우 DataCollection의 첫 번째 column을 제외한dataType이 number인 column을 사용. 

seriesColumns은 각 series에 대한 column의 ID값이나 옵션을 설정한 객체일 수 있음.
seriesColumns에 객체를 넣을 수 없는 차트: Single Series, Scatter, Zoom Lines

사용 예

객체 설명

seriesColumns

setChartColumnRef() API 이용

setChartColumnRef() API를 이용하여 아래와 같이 동적으로 DataCollection을 바인딩할 수 있습니다.

chart1.setChartColumnRef('data:dataList2','Year',"[['ServiceC']]");						 
chart2.setChartColumnRef('data:dataList1','Month',"[['Year2','Year3','Year1']]");

DataCollection의 getFusionChartData() API 이용

dataList의 getFusionChartData()를 호출하면 chartType에 따라 알맞은 차트 데이터가 반환 됩니다. 반환타입은 JSON 객체이며 FusionChart의 setJSONData() API로 해당 데이터를 설정하면 화면에 차트가 그려집니다.

getFusionChartData() API를 이용하는 경우 DataCollection과 직접 바인딩 된 것은 아니기 때문에 DataCollection의 데이타가 업데이트 되더라도 차트는 갱신되지 않습니다. 갱신을 원할 경우, 9.1/9.2를 이용해서 DataCollection과 직접 바인딩하십시오.

<script type="javascript"><![CDATA[

       // 위에 정의된 xml를 읽어 datalist에 바인딩합니다.
       dataList1.setXML(WebSquare.ModelUtil.findInstanceNode('vector'));

       //dataList를 getFusionChartData() API를 사용하여 차트데이터로 변환합니다.
       var chartObj = dataList1.getFusionChartData("column2d”, "Month", ”[["Price"]]”);
     
       //변환된 데이터를 차트에 셋팅 합니다
       chart1.setJSONData(chartObj);.

]]></script>

DataCollection으로 모든 FusionChart 옵션을 지원하는데는 한계가 있기 때문에 , getFusionChartData() API로 반환받는 json 객체를 직접 핸들링하여 원하시는 옵션을 추가 할 수 있습니다.

var chartObj = dataList1.getFusionChartData("Column2D","Month","[['Price']]”);
var vlineObj =  { "vline":"true","color":"FF5904","thickness":"2”};
chartObj.data.splice(2, 0, vlineObj);  // vline을 추가합니다. 
chart1.setJSONData(chartObj);

차트 타입 변경

changeType() 함수를 사용하여 차트 타입을 변경할 수 있습니다.

$r_title(사용 예)
fusionChart1.changeType(“line”); 
fusionChart1.changeType(“funnel”);
fusionChart1.changeType(“pyramid”);

예제 파일


인터넷에서 다운로드 혹은

WEBSQUARE_DEV_PACK의 GUIDE 프로젝트에서 보기

(/FusionChart/changeType_FusionChart.xml)

YouTube 동영상 (https://youtu.be/nyXDiCfCgc8)

예제

Single Series Chart

<model>

<xf:model>
	<w2:dataCollection>
		<w2:dataList id="dataList1" baseNode="vector" repeatNode="item" valueNode="">
			<w2:columnInfo>
				<w2:column id="Month" name="Month" dataType="text"></w2:column>
				<w2:column id="Price" name="Price" dataType="number"></w2:column>
			</w2:columnInfo>
		</w2:dataList>
	</w2:dataCollection>
	<xf:instance>
		<data xmlns="">
			<vector>
				<item>
					<Month>January</Month>
					<Price>17400</Price>
				</item>
				<item>
					<Month>February</Month>
					<Price>19800</Price>
				</item>
				<item>
					<Month>March</Month>
					<Price>21800</Price>
				</item>
				<item>
					<Month>April</Month>
					<Price>23800</Price>
				</item>
				<item>
					<Month>May</Month>
					<Price>29600</Price>
				</item>
				<item>
					<Month>June</Month>
					<Price>27600</Price>
				</item>
				<item>
					<Month>July</Month>
					<Price>31800</Price>
				</item>
				<item>
					<Month>August</Month>
					<Price>39700</Price>
				</item>
				<item>
					<Month>September</Month>
					<Price>37800</Price>
				</item>
				<item>
					<Month>October</Month>
					<Price>21900</Price>
				</item>
				<item>
					<Month>November</Month>
					<Price>32900</Price>
				</item>
				<item>
					<Month>December</Month>
					<Price>39800</Price>
				</item>
			</vector>
		</data>
	</xf:instance>
</xf:model>

<script>

<script type="javascript"><![CDATA[
       // dataCollection이  셋팅되면 자동으로 차트가 그려짐
       dataList1.setXML(WebSquare.ModelUtil.findInstanceNode('vector'));
</script>

<body>

<w2:FusionChart id="chart1" style="height:280px;width:100%;" chartType="Column2D" drawType="javascript" ref="data:dataList1" seriesColumns="[['Price']]" labelNode="Month"></w2:FusionChart>

fusion4

Multi Series Charts / Combination Chart

<model>

<xf:model>
	<w2:dataCollection>
		<w2:dataList id="dataList2" baseNode="vector2" repeatNode="item" valueNode="">
			<w2:columnInfo>
				<w2:column id="Month" name="Month" dataType="text"></w2:column>
				<w2:column id="Year1" name="2005" dataType="number"></w2:column>
				<w2:column id="Year2" name="2006" dataType="number"></w2:column>
				<w2:column id="Year3" name="2007" dataType="number"></w2:column>
			/w2:columnInfo>
		</w2:dataList>

	</w2:dataCollection>
	<xf:instance>
		<data xmlns="">
			<vector2>
				<item>
					<Month>January</Month>
					<Year1>27400</Year1>
					<Year2>10000</Year2>
					<Year3>10000</Year3>
				</item>
				<item>
					<Month>February</Month>
					<Year1>11500</Year1>
					<Year2>28110</Year2>
					<Year3>23990</Year3>
				</item>
				<item>
					<Month>March</Month>
					<Year1>12500</Year1>
					<Year2>29800</Year2>
					<Year3>32700</Year3>
				</item>
				<item>
					<Month>April</Month>
					<Year1>27400</Year1>
					<Year2>10000</Year2>
					<Year3>29000</Year3>
				</item>
				<item>
					<Month>May</Month>
					<Year1>1500</Year1>
					<Year2>10000</Year2>
					<Year3>10000</Year3>
			               </item>
				<item>
					<Month>June</Month>
					<Year1>19700</Year1>
					<Year2>32600</Year2>
					<Year3>32600</Year3>
				</item>
				<item>
					<Month>July</Month>
					<Year1>27400</Year1>
				                <Year2>29700</Year2>
					<Year3>31900</Year3>
				</item>
				<item>
					<Month>August</Month>
					<Year1>27400</Year1>
					<Year2>10000</Year2>
					<Year3>21800</Year3>
				</item>
				<item>
					<Month>September</Month>
				                <Year1>27400</Year1>
					<Year2>31800</Year2>
					<Year3>42800</Year3>
				</item>
				<item>
					<Month>October</Month>
					<Year1>27400</Year1>
					<Year2>15000</Year2>
					<Year3>11000</Year3>
				</item>
				<item>
					<Month>November</Month>
					<Year1>27400</Year1>
					<Year2>9800</Year2>
					<Year3>11800</Year3>
				</item>
				<item>
					<Month>December</Month>
					<Year1>27400</Year1>
					<Year2>22900</Year2>
					<Year3>20800</Year3>
				</item>
			</vector2>
		</data>
	</xf:instance>
</xf:model>

<script>

<script type="javascript"><![CDATA[
       // dataCollection이  셋팅되면 자동으로 차트가 그려짐  dataList2.setXML(WebSquare.ModelUtil.findInstanceNode('vector2'));]
</script>

<body>

<w2:fusionchart chartType="MSColumn2D" drawType="javascript" id="chart2" ref="data:dataList2" labelNode="Month"  seriesColumns="[['Year1','Year2','Year3']]" style="height:280px;width:100%;"> </w2:fusionchart>

<w2:fusionchart chartType="StackedColumn3DLineDY" drawType="javascript" id="chart3" ref="data:dataList2" labelNode="Month" seriesColumns="[['Year1','Year2',{'id':'Year3','seriesname':'Year New', 'renderas':'Line', 'showValues':'1', 'parentyaxis':'S'}]]" style="height:280px;width:100%;"></w2:fusionchart>

fusion5

Multi Serires Stacked Chart

<model>

<xf:model>
	<w2:dataCollection>
	     <w2:dataList id="dataList3" baseNode="vector3" repeatNode="item" valueNode="">
	             <w2:columnInfo>
		  <w2:column id="Year" name="Year" dataType="text></w2:column>
		  <w2:column id="ProductA" name="Product A" dataType="number"></w2:column>
		  <w2:column id="ProductB" name="Product B" dataType="number"></w2:column>
		  <w2:column id="ServiceA" name="Service A" dataType="number"></w2:column>
		  <w2:column id="ServiceB" name="Service B" dataType="number"></w2:column>
		   <w2:column id="ServiceC" name="Service C" dataType="number"></w2:column>
		   <w2:column id="Revenue" name="Cost as % of Revenue"  dataType="number"></w2:column>
		   <w2:column id="RevenueB" name="Cost as % of Revenue B"  dataType="number"></w2:column>
		/w2:columnInfo>
	        </w2:dataList>
	</w2:dataCollection>
	<xf:instance>
		<data xmlns="">
			<<vector3>
				<item>
					<Year>2001</Year>
				                <ProductA>30</ProductA>
					<ProductB>26</ProductB>
					<ServiceA>29</ServiceA>
					<ServiceB>31</ServiceB>
	            		                                <ServiceC>34</ServiceC>
					<Revenue>57</Revenue>
					<RevenueB>27</RevenueB>
				</item>
				<item>
					<Year>2002</Year>
					<ProductA>21</ProductA>
					<ProductB>28</ProductB>
					<ServiceA>39</ServiceA>
					<ServiceB>41</ServiceB>
					<ServiceC>24</ServiceC>
					<Revenue>68</Revenue>
					<RevenueB>67</RevenueB>
				</item>
				<item>
					<Year>2003</Year>
					<ProductA>27</ProductA>
					<ProductB>25</ProductB>
					<ServiceA>28</ServiceA>
					<ServiceB>31</ServiceB>
					<ServiceC>10</ServiceC>
					<Revenue>79</Revenue>
					<RevenueB>43</RevenueB>
				</item>
				<item>
					<Year>2004</Year>
					<ProductA>17</ProductA>
					<ProductB>16</ProductB>
					<ServiceA>29</ServiceA>
					<ServiceB>31</ServiceB>
					<ServiceC>34</ServiceC>
					<Revenue>73</Revenue>
					<RevenueB>25</RevenueB>
				</item>
				<item>
					<Year>2005</Year>
					<ProductA>30</ProductA>
					<ProductB>22</ProductB>
					<ServiceA>29</ServiceA>
					<ServiceB>43</ServiceB>
					<ServiceC>22</ServiceC>
					<Revenue>80</Revenue>
					<RevenueB>33</RevenueB>
				</item>
			</vector3>
		</data>
	</xf:instance>
</xf:model>

<script>

<script type="javascript"><![CDATA[
       // dataCollection이  셋팅되면 자동으로 차트가 그려짐                                 dataList3.setXML(WebSquare.ModelUtil.findInstanceNode('vector3’));
</script>

<body>

<w2:fusionchart chartType="MSStackedColumn2D" drawType="javascript" id="chart4" ref="data:dataList3" labelNode="Year"  seriesColumns="[['ProductA','ProductB'], ['ServiceA','ServiceB',{'id':'ServiceC','showvalues':'1'}]]" style="height:280px;width:100%;"></w2:fusionchart>

<!--  MSStackedColumn2DLineDY 차트의 경우 마지막 시리즈 배열은 LineDY로 인식합니다.   -->
<w2:fusionchart chartType="MSStackedColumn2DLineDY" drawType="javascript" id="chart5" ref="data:dataList3" labelNode="Year"  seriesColumns="[['ProductA','ProductB'], ['ServiceA','ServiceB','ServiceC'],[{'id':'Revenue','linethickness':'2'},{'id':'RevenueB','linethickness':'5'}]]" style="height:280px;width:100%;"></w2:fusionchart>

fusion6

Scatter & Bubble Chart

<model>

<xf:model>
	<w2:dataCollection>
		<w2:dataList id="dataList4" baseNode="vector4" repeatNode="item" valueNode="">
			<w2:columnInfo>
				<w2:column id="Server" name="Server" dataType="text"></w2:column>
				<w2:column id="X" name="X" dataType="number"></w2:column>
				<w2:column id="Y" name="Y" dataType="number"></w2:column>
			</w2:columnInfo>
		</w2:dataList>
	</w2:dataCollection>
	<xf:instance>
		<data xmlns="">
			<vector4>
				<item>
					<Server>Server 1</Server>
					<X>21</X>
					<Y>2.4</Y>
				</item>
				<item>
					<Server>Server 1</Server>
					<X>43</X>
					<Y>2.5</Y>
				</item>
				<item>
					<Server>Server 1</Server>
					<X>43</X>
					<Y>3.5</Y>
				</item>
				<item>
					<Server>Server 1</Server>
					<X>23</X>
					<Y>1.5</Y>
				</item>
				<item>
					<Server>Server 1</Server>
					<X>33</X>
					<Y>1.6</Y>
				</item>
				<item>
					<Server>Server 2</Server>
					<X>41</X>
					<Y>1.1</Y>
				</item>
				<item>
					<Server>Server 2</Server>
					<X>43</X>
					<Y>2.5</Y>
				</item>
				<item>
					<Server>Server 2</Server>
					<X>43</X>
			                    	<Y>1.5</Y>
				</item>
				<item>
					<Server>Server 2</Server>
					<X>50</X>
					<Y>3.2</Y>
				</item>
				<item>
					<Server>Server 2</Server>
					<X>22</X>
					<Y>4.3</Y>
				</item>
			</vector4>
		</data>
	</xf:instance>
</xf:model>

<script>

<script type="javascript"><![CDATA[
       // dataCollection이  셋팅되면 자동으로 차트가 그려짐                                 dataList4.setXML(WebSquare.ModelUtil.findInstanceNode('vector4’));
</script>

<body>

<!-- seriesColumns : X, Y, Z의 컬럼 ID를 순서대로 설정 -->
<w2:fusionchart chartType="Scatter" drawType="javascript" id="chart6" ref="data:dataList4" labelNode="Server" seriesColumns="[['X','Y']]" style="height:280px;width:100%;"></w2:fusionchart>

fusion8

Zoom Line Chart

Zoom Line Chart의 경우 두 가지 데이타 구조를 지원합니다.

  1. Standard Multi-series JSON Data: 9.1.1.2 Multi Series Charts / Combination Chart와 동일

  2. Compact JSON data: 이 형식은 JSON의 크기와 구문 분석 시간을 줄일 수 있습니다. 차트에 표시 할 1,000 개 이상의 데이터 포인트가 있을 때에는 해당 형식을 사용 하시기 바랍니다. Compact JSON data를 사용하기 위해서는 차트 Attribute에 필수적으로 compactdatamode와 dataseparator을 넣어주셔야 합니다.

아래는 Compact JSON data를 사용한 샘플입니다.

<model>

<xf:model>
	<w2:dataCollection>
		<w2:dataList id="dataList5" baseNode="vector5" repeatNode="item" valueNode="">
			<w2:columnInfo>
				<w2:column id="Month" name="Month" dataType="text"></w2:column>
				<w2:column id="Year1" name="2005" dataType="number"></w2:column>
				<w2:column id="Year2" name="2006" dataType="number"></w2:column>
			</w2:columnInfo>
		</w2:dataList>
	</w2:dataCollection>
	<xf:instance>
		<data xmlns="">
			<vector5>
                                                                <!-- Compact JSON data -->
				<item>				<Month>January-07|February-07|March-07|April-07|May-07|June-07|July-07|August-07|September-07|October-07|November-07|December-07|January-08|February-08|March-08|April-08|May-08|June-08|July-08|August-08|September-08|October-08|November-08|December-08|January-09|February-09|March-09|April-09|May-09|June-09|July-09|August-09|September-09|October-09|Nevember-09|December-09|January-10|February-10|March-10|April-10|May-10|June-10|July-10|August-10|September-10|October-10|November-10|December-10||
					</Month>						<Year1>||||16|41|64|53|78|47|91|23|72|49|27||26|49|27|41|35|12|24|10|79|71|74|84|43|63|40|59|64|59|52|55|20|22|61|57|61|05|15|39||32|31|25|14|44
					</Year1>			<Year2>23|69|80|49|69|01|04|46|27|40|25|22|39|10|46|44|16|39|10|30|23|30|42|78|45||70|59|35|34|8|45|83|50|97|17|73|49|17|14|28||84|32|62|25|78|31|56|19
					</Year2>
				</item>
			</vector5>
		</data>
	</xf:instance>
</xf:model>

<script>

<script type="javascript"><![CDATA[
        //chart7 Attribute 세팅 
        var options = {    "caption":"Web visits",  "compactdatamode":"1",  "dataseparator":"|"  }
       chart7.setChartAttribute(options);

       // dataCollection이  셋팅되면 자동으로 차트가 그려짐                                          dataList5.setXML(WebSquare.ModelUtil.findInstanceNode('vector5’));
</script>

<body>

<w2:fusionchart chartType="ZoomLine" drawType="javascript" id="chart7" ref="data:dataList5" labelNode="Month" seriesColumns="[['Year1','Year2']]" style="height:280px;width:100%;"></w2:fusionchart>

fusion9

Pie 및 Doughnut을 모두 지원하는 차트

Pie 차트나 Doughnut 차트는 Single-series Chart 입니다. 
같은 데이터 구조를 가지는 차트는 타입만 바꾸면 차트를 변경할 수 있습니다.
다음은 togglePieSlice()  API를 사용하여 Pie 및 Doughnut 형태 모두를 지원하는 차트 예제입니다.

fusion1

사용자가 Toggle 버튼을 누르면 togglePieSlice() API가 실행되어 3번째 조각을 파이에서 떨어져 나가게 합니다.

fusion2

선택 박스에서 Doughnut3D를 선택하면 Doughnut3D 차트로 바뀝니다.

$r_title(예제 소스)
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:w2="http://www.inswave.com/websquare" xmlns:xf="http://www.w3.org/2002/xforms">
	<head>
		<w2:buildDate />
		<xf:model>
			<xf:instance>
				<data xmlns=""/>
			</xf:instance>
		</xf:model>
		<script type="javascript"><![CDATA[

                           var circle = {
		    "chart": {
		    },
		    "data": [
		        {
		            "label": "Leverling",
		            "value": "100524"
		        },
		        {
		            "label": "Fuller",
		            "value": "87790"
		        },
		        {
		            "label": "Davolio",
		            "value": "81898"
		        },
		        {
		            "label": "Peacock",
		            "value": "76438"
		        },
		        {
		            "label": "King",
		            "value": "57430"
		        },
		        {
		            "label": "Callahan",
		            "value": "55091"
		        },
		        {
		            "label": "Dodsworth",
		            "value": "43962"
		        },
		        {
		            "label": "Suyama",
		            "value": "22474"
		        },
		        {
		            "label": "Buchanan",
		            "value": "21637"
		        }
		    ] };

       var circle_options = {
                 "caption": "Sales Per Employee for year 1996",
                 "formatnumberscale": "0",
                 "numberprefix": "$",
                 "pieslicedepth": "30",
                 "startingangle": "125",
                 "showLegend":"1"
        };

         chart_ref1.setChartAttribute(circle_options);
         chart_ref1.setJSONData(circle);
	
         ]]></script>
	</head>
	<body>
	<w2:fusionchart id="chart_ref1" style="position: absolute ;left: 40px; top: 50px; width:450px; height: 300px;" chartType="Pie2D" drawType="javascript"></w2:fusionchart>

		<xf:select1 disabledClass="w2selectbox_disabled" appearance="minimal" direction="auto" chooseOption="" id="selectbox3" style="position: absolute ;left: 500px;top: 80px;width: 186px;height: 30px;" displayMode="label" allOption="" disabled="false" submenuSize="auto">
			<xf:choices>
				<xf:item>
					<xf:label>Pie2D</xf:label>
					<xf:value>Pie2D</xf:value>
				</xf:item>
				<xf:item>
					<xf:label>Pie3D</xf:label>
					<xf:value>Pie3D</xf:value>
				</xf:item>
				<xf:item>
					<xf:label>Doughnut2D</xf:label>
					<xf:value>Doughnut2D</xf:value>
				</xf:item>
				<xf:item>
					<xf:label>Doughnut3D</xf:label>
					<xf:value>Doughnut3D</xf:value>
				</xf:item>
			</xf:choices>
			<script type="javascript" ev:event="onchange"><![CDATA[
				var type = selectbox3.getValue();
				var chart = chart_ref1.fc().clone({"type":type,"id":"fc_"+type});
				chart.render(chart_ref1.render);
			 ]]></script>
		</xf:select1>
		
		<xf:group id="group16" class="" style="position: absolute ;left: 500px;top: 50px;">
                                                <xf:input id="input1" style="width: 100px;height: 22px;margin-right:3px;"></xf:input>
			<xf:trigger type="button" id="trigger7" style="width:73px;height:27px;">
				<xf:label>toggle</xf:label>
				<script type="javascript" ev:event="onclick"><![CDATA[
					var num = input1.getValue();
					var chart = FusionCharts.items;
					chart[chart_ref1.render.childNodes[0].id].togglePieSlice(num);
				 ]]></script>
			</xf:trigger></xf:group>
	</body>
</html>

Submission 이용

fusion3

$r_title(FusionChart_Adv_001_data.jsp)
<%@ page contentType="text/xml;charset=UTF-8" language="java" errorPage="" import="java.io.*,org.w3c.dom.*"
%><%
response.setContentType( "application/json" );
StringBuffer sb = new StringBuffer();
sb.append("{\"categories\":[{\"category\":[{\"label\":\"Quarter 1\"},{\"label\":\"Quarter 2\"},{\"label\":\"Quarter 3\"},{\"label\":\"Quarter 4\"}]}], \"dataset\":[{\"seriesname\":\"Product A\",\"data\":[{\"value\":\"659400\"},{\"value\":\"465400\"},{\"value\":\"764500\"},{\"value\":\"650500\"}]},{\"seriesname\":\"Product B\",\"data\":[{\"value\":\"546300\"},{\"value\":\"436500\"},{\"value\":\"546500\"},{\"value\":\"332500\"}]},{\"seriesname\":\"Product C\",\"data\":[{\"value\":\"657600\"},{\"value\":\"564600\"},{\"value\":\"348600\"},{\"value\":\"436600\"}]},{\"seriesname\":\"Product D\",\"data\":[{\"value\":\"436500\"},{\"value\":\"765700\"},{\"value\":\"453900\"},{\"value\":\"326400\"}]}]}" );
out.println( sb.toString() );
%>
$r_title(전체 소스)
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:w2="http://www.inswave.com/websquare"
	xmlns:xf="http://www.w3.org/2002/xforms">
	<head>
		<w2:buildDate />
		<xf:model>
			<xf:instance>
				<data xmlns=""></data>
			</xf:instance>
			<xf:submission id="productInfo" ref="res" target="req" action="FusionChart_Adv_001_data.jsp" method="post" mediatype="application/json"
				encoding="UTF-8" instance="" replace="instance" errorHandler="" customHandler="" mode="asynchronous" processMsg="">
				<script type="javascript" ev:event="xforms-submit-done"><![CDATA[
					productOrgObj = JSON.parse(e.responseText);
					Product_Checkbox.checkAll( true );
					
					// 속성 설정 
					chart1.setChartAttribute(attributeOptions);
					
                                                                                // data 설정  
					chart1.setJSONData(productOrgObj);

				 ]]></script>
			</xf:submission>
		</xf:model>
		<script type="javascript"><![CDATA[
		    var productOrgObj; // 서브미션 후 받은 데이터를 저장할 object 
		    
		                 // 기본 옵션 설정
	                                 var attributeOptions = {
			                       "caption": "Product Wise Sales",
				        "formatNumberScale": "0",
				        "numberPrefix": "$"
			};
			
			function fn_init(){
				// 서브미션 실행 
				WebSquare.ModelUtil.executeSubmission( "productInfo" );
			}
				
			
			// Chart Configuration chekcbox가 변경 될 때  차트 속성을 업데이트
			function fn_AttributeData(){
			    if(Ani_Checkbox.getValue()){
			    	 attributeOptions["animation"] = "1"; 
			    }else{
			   		 attributeOptions["animation"] = "0"; 
			    }
			  
			    if(Value_Checkbox.getValue()){
			    	attributeOptions["showValues"] = "1"; 
					attributeOptions["rotateValues"] = "1"; 
					attributeOptions["placeValuesInside"] = "1"; 
			    }else{
			   		attributeOptions["showValues"] = "0"; 
			    }
			   chart1.setChartAttribute(attributeOptions);
			}
			
			// Product chekcbox가 변경 될 때 차트 데이터 부분을 업데이트
			function fn_productData(){	
				var data = Product_Checkbox.getValue(",");
				var dataArr = data.split(",");
				
				var productObj = {};
				
				productObj["categories"] = productOrgObj["categories"] ;
				productObj["dataset"] = [];
				
				for(var i = 0; i < dataArr.length; i++){
					for( var j = 0 ; j < productOrgObj["dataset"].length; j++){
						if( dataArr[i] == productOrgObj["dataset"][j].seriesname){
							productObj["dataset"].push(productOrgObj["dataset"][j]);
						} 
					}
				}
				chart1.setJSONData(productObj);
				fn_AttributeData();
			}
			
			fn_init();			
		
		 ]]></script>
		<style type="text/css"><![CDATA[
         	.txt_box {
				postion: relative;
				padding: 20px;
				background: #d9eef9;
				border: 1px solid #93a7b2;
				margin: 10px 0;
			}
				
			.txt_cont {
				margin-top: 5px;
				background: #d9eef9;
			}
			
			.txt_title{
				color: #2a597d;
				font-size: 12px;
				font-weight: bold;
			}
			
			.sam-combg{
				padding: 3px 3px 5px 3px;
				background: #f2f2f2;
			}
			
			.pro_check .w2checkbox_label{
				color: #444;
				font-weight: bold;
				float: left;
				margin-right: 10px;
				font-size:15px;
			}
			
			.config_check .w2checkbox_label{
				color: #444;
				float: left;
				margin-right: 10px;
				font-size:12px;
			}

          ]]></style>
	</head>
	<body>
		<xf:group id="frame_contents" style="position: relative;padding-left:5px;padding-right:5px;">
			<xf:group id="desc1" style="" tagname="" class="txt_box">
				<w2:textbox class="txt_title" id="title1" label="Example Application" style="position: relative;"></w2:textbox>
				<xf:group class="txt_cont" id="group1" style="" tagname="ul">
					<w2:textbox id="textbox1" label="FusionCharts에서 제공되고 있는 JavaScript Example Application을 수정한 샘플 파일입니다." style="" tagname="li"></w2:textbox>
					<w2:textbox id="textbox4" label="서브미션 실행 후 데이터를 받아 차트를 그립니다." style="" tagname="li"></w2:textbox>
					<w2:textbox id="textbox5" label="선택 된 checkbox에  따라 차트 내용이 업데이트 됩니다." style="" tagname="li"></w2:textbox>
				</xf:group>
			</xf:group>
			<xf:group id="group2" class="" style="padding:15px;height:500px;width:600px;">
				<xf:group id="group3" class="sam-combg" style="height:37px;">
					<xf:select appearance="full" id="Product_Checkbox" style="height:30px;padding :3px;" selectedindex="-1" cols="4" rows=""
						class="pro_check">
						<xf:choices>
							<xf:item>
								<xf:label>Product A</xf:label>
								<xf:value>Product A</xf:value>
							</xf:item>
							<xf:item>
								<xf:label>Product B</xf:label>
								<xf:value>Product B</xf:value>
							</xf:item>
							<xf:item>
								<xf:label>Product C</xf:label>
								<xf:value>Product C</xf:value>
							</xf:item>
							<xf:item>
								<xf:label>Product D</xf:label>
								<xf:value>Product D</xf:value>
							</xf:item>
						</xf:choices>
						<script ev:event="onchange" type="javascript"><![CDATA[
							fn_productData();
						]]></script>
					</xf:select>
				</xf:group>
				<xf:group id="group4" style="height:25px;padding-top:15px;">
					<xf:group id="group5" style="height:20px;">
						<xf:select id="Value_Checkbox" cols="2" appearance="full" style="float:right;;" class="config_check" selectedindex="-1"
							rows="">
							<xf:choices>
								<xf:item>
									<xf:label>Show Data Values?</xf:label>
									<xf:value>true</xf:value>
								</xf:item>
							</xf:choices>
							<script ev:event="onchange" type="javascript"><![CDATA[
								fn_AttributeData();
							 ]]></script>
						</xf:select>
						<xf:select id="Ani_Checkbox" cols="2" appearance="full" style="float:right;;" class="config_check" selectedindex="0" rows="">
							<xf:choices>
								<xf:item>
									<xf:label>Animate chart whie chaging data?</xf:label>
									<xf:value>true</xf:value>
								</xf:item>
							</xf:choices>
							<script ev:event="onchange" type="javascript"><![CDATA[
								fn_AttributeData();
							 ]]></script>
						</xf:select>
						<w2:textbox id="textbox2" style="width:130px;float:right;color: #2a597d;font-size: 12px;font-weight: bold;height:15px;padding-top:5px;"
							class="" label="Chart Configuration : ">
						</w2:textbox>
					</xf:group>
				</xf:group>
				<w2:fusionchart id="chart1" style="position:relative;width:600px; height: 400px;" chartType="MSBar2D" drawType="javascript" plotColor="AFD8F8,F6BD0F,8BBA00,A66EDD">
				</w2:fusionchart>
			</xf:group>
		</xf:group>
	</body>
</html>
$r_title(FusionChart_Adv_001_data.jsp)
<%@ page contentType="text/xml;charset=UTF-8" language="java" errorPage="" import="java.io.*,org.w3c.dom.*"
%><%
response.setContentType( "application/json" );
StringBuffer sb = new StringBuffer();
sb.append("{\"categories\":[{\"category\":[{\"label\":\"Quarter 1\"},{\"label\":\"Quarter 2\"},{\"label\":\"Quarter 3\"},{\"label\":\"Quarter 4\"}]}], \"dataset\":[{\"seriesname\":\"Product A\",\"data\":[{\"value\":\"659400\"},{\"value\":\"465400\"},{\"value\":\"764500\"},{\"value\":\"650500\"}]},{\"seriesname\":\"Product B\",\"data\":[{\"value\":\"546300\"},{\"value\":\"436500\"},{\"value\":\"546500\"},{\"value\":\"332500\"}]},{\"seriesname\":\"Product C\",\"data\":[{\"value\":\"657600\"},{\"value\":\"564600\"},{\"value\":\"348600\"},{\"value\":\"436600\"}]},{\"seriesname\":\"Product D\",\"data\":[{\"value\":\"436500\"},{\"value\":\"765700\"},{\"value\":\"453900\"},{\"value\":\"326400\"}]}]}" );
out.println( sb.toString() );
%>

MapChart

MapChart 컴포넌트는 d3 데이터를 이용하여 대한민국의 전국 지도를 다양한 형태로 시각화하여 표현할 수 있습니다.

컴포넌트 설명

요약

d3 데이터를 이용하여 대한민국의 전국 지도를 다양한 형태로 시각화하여 표현.

기능 및 특징

  • 각 지명 위에 마커 표시 가능.

  • 각 마커 별 스타일 지정 가능.

YouTube 동영상

YouTube 동영상 (https://youtu.be/BRcjBZ6xNeg)

지역명 위에 마커 표시

userMarker="true" 설정을 추가하면 지도의 지역명 위에 마커를 표시할 수 있습니다.

useMarker="false"

useMarker="true"

지도의 지역명 위에 마커를 클릭할 때 표시할 컨텍스트를 정의하는 함수의 이름은 contextFormatter 속성으로 정의한 후, 아래와 같이 직접 구현하십시오.

$r_title(contextFormatter로 지정한 함수 구현 (예))
scwin.mapchart1_contextFormatter = function(name, code) {
    return "<br>Completed 0," + "<br>In-progress 0," + "<br>Scheduled 0";
}

예제 파일


인터넷에서 다운로드 혹은

WEBSQUARE_DEV_PACK의 GUIDE 프로젝트에서 보기

(/MapChart/useMarker_contextFormatter_MapChart.xml)

YouTube 동영상 (https://youtu.be/FU52N0D18mo)

각 마커의 표시 여부 및 적용할 스타일 설정

$r_title(사용 예)
markerDefiner=“scwin.mapchart1_markerDefiner”
markerClass=“class1,class2”
markerClassDefiner=“scwin.mapchart1_markerClassDefiner”
$r_title(markerDefiner="scwin.mapchart1_markerDefiner" 구현 예)
scwin.mapchart1_markerDefiner = function(name, code) {
    if (code % 2 == 1) {
        return true;
    } else {
        return false;
    }
};
$r_title(Class 설정 예)
<style type="text/css">
     <![CDATA[
     .class1 {
         fill: #588a8f;
     }

     .class1:hover {
         fill: #e03a3a;
     }

     .class2 {
         fill: #CC33CC;
     }

     .class2:hover {
         fill: #CCCCFF;
     }
     ]]>
 </style>
$r_title(markerDefiner="scwin.mapchart1_markerDefiner" 구현 예)
scwin.mapchart1_markerDefiner = function(name, code) {
    if (code % 2 == 1) {
        return true;
    } else {
        return false;
    }
};

예제 파일


인터넷에서 다운로드 혹은

WEBSQUARE_DEV_PACK의 GUIDE 프로젝트에서 보기

(/MapChart/markerDefiner_markerClass_markerClassDefiner_MapChart.xml)

YouTube 동영상 (https://youtu.be/tWLwvlwZW5Q)