amcharts js 制作柱状统计图和饼图

amcharts js制作图表还是比较方便的。尤其是纯客户端页面。远程调用时返回的结果需要转成数组,稍稍有些麻烦。

下面是使用步骤:
1 下载amcharts_2.7.3.zip
2 将amcharts文件夹拷到工程中。(连同images文件夹,amcharts.js文件一起)
3 参考官方文档编写页面。以jsp为例,代码如下:

<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>amChart示例</title>
<!-- 注意以下路径根据实际情况修改 -->
<script src="../js/jquery.min.js" type="text/javascript"></script>
<script src="../js/amcharts/amcharts.js" type="text/javascript"></script>
<script type="text/javascript">

var chart;
var chartType = "column";//柱状图
var chartData = [{
year: 2005,
income: 23.5
}, {
"year": 2006,
income: 26.2
}, {
year: 2007,
income: 30.1
}, {
year: 2008,
income: 29.5
}, {
year: 2009,
income: 24.6
}];

//var chartData ;

$(document).ready(function() {
$.ajax({
type: "GET",
url: "远程地址如:http://localhost:8080/amchartdata.action",
success: function(msg){
//这里认为msg为json对象
//需要将json对象转换成类似上面的chartData变量的数组
var list = [];
for(var k in msg){
var data = {};
for(var k2 in msg[k]){
data[k2] = msg[k][k2];
}
list.push(data);
}

chartData = list;
createChart();
}
});
//如果是静态的数据,直接调用createChart();使用chartData变量。上面的远程调用去掉。
//createChart();
});
//创建柱状图
function createChart(){
// SERIAL CHART
chart = new AmCharts.AmSerialChart();
chart.dataProvider = chartData;
chart.categoryField = "year";
// this single line makes the chart a bar chart,
// try to set it to false - your bars will turn to columns
chart.rotate = true;
// the following two lines makes chart 3D
chart.depth3D = 20;
chart.angle = 30;

// AXES
// Category
var categoryAxis = chart.categoryAxis;
categoryAxis.gridPosition = "start";
categoryAxis.axisColor = "#DADADA";
categoryAxis.fillAlpha = 1;
categoryAxis.gridAlpha = 0;
categoryAxis.fillColor = "#FAFAFA";

// value
var valueAxis = new AmCharts.ValueAxis();
valueAxis.axisColor = "#DADADA";
valueAxis.title = " xx统计图";
valueAxis.gridAlpha = 0.1;
chart.addValueAxis(valueAxis);

// GRAPH
var graph = new AmCharts.AmGraph();
graph.title = "Income";
graph.valueField = "income";
graph.type = "column";
//graph.balloonText = "Income in [[category]]:[[value]]";
graph.balloonText = "Income in [[category]]:[[value]]";
graph.lineAlpha = 0;
graph.fillColors = "#bf1c25";
graph.fillAlphas = 1;
chart.addGraph(graph);

// WRITE
chart.write("chartdiv");
}
//创建饼图
function createPieChart(){
chart = new AmCharts.AmPieChart();
chart.dataProvider = chartData;
chart.titleField = "year";
chart.valueField = "income";
chart.outlineColor = "#FFFFFF";
chart.labelsEnabled = false;
chart.outlineAlpha = 0.8;
chart.outlineThickness = 2;

// LEGEND
legend = new AmCharts.AmLegend();
legend.align = "center";
legend.markerType = "circle";
chart.addLegend(legend);

// WRITE
chart.write("chartdiv");
}
//图形转换
function switchChartType(){
$("#chartdiv").html("");
if(chartType=="column"){
createPieChart();
chartType = "pie";
}else{
createChart();
chartType = "column";
}

}
</script>
</head>
<body>
<div id="chartdiv" style="width: 300px; height: 400px;"></div>
<div><input type="button" value="图形切换" onclick="switchChartType()"></input></div>
</body>
</html>


数据对象

package com.musicbox.chart;

public class Data {
private String year;
private float income;

public String getYear() {
return year;
}

public void setYear(String year) {
this.year = year;
}

public float getIncome() {
return income;
}

public void setIncome(float income) {
this.income = income;
}
}


Action部分代码

package com.musicbox.chart;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.codehaus.jackson.map.ObjectMapper;

import com.opensymphony.xwork2.ActionSupport;
import com.yotc.opviewweb.entity.chart.Data;
import com.yotc.opviewweb.util.web.Struts2FlexUtils;

public class AmchartAction extends ActionSupport {

public String chartdata() throws Exception {
try {
List<Data> datas = new ArrayList<Data>();
Data d1 = new Data();
d1.setIncome(10f);
d1.setYear("2001年");
datas.add(d1);
Data d2 = new Data();
d2.setIncome(20f);
d2.setYear("2002");
datas.add(d2);
Data d3 = new Data();
d3.setIncome(30f);
d3.setYear("2003");
datas.add(d3);
Data d4 = new Data();
d4.setIncome(40f);
d4.setYear("2004");
datas.add(d4);
ObjectMapper mapper = new ObjectMapper();
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json;charset=UTF-8");
mapper.writeValue(response.getWriter(), datas);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}

xml <!-- [xml] (xml / csv) 数据类型xml/csv--> ; <!-- 如果使用csv作为数据的话,需要使用这个属性;表示文件数据分隔符,(平常以";"和","为主) [;] (string) csv file data separator (you need it only if you are using csv file for your data) --> 1 <!-- 如果使用的是csv数据,可以设置跳过几行再显示数据,默认为0表示csv中的数据全部显示,大于n(n>0);表示前面n行都不显示[0] (Number) if you are using csv data type, you can set the number of rows which should be skipped here --> <!-- 设置系统中的字体[Arial] (font name) use device fonts, such as Arial, Times New Roman, Tahoma, Verdana... --> <!-- 设置所有文本的大小,默认为11,具体的文本的字体大小也可以在下面的设置中设置[11] (Number) text size of all texts. Every text size can be set individually in the settings below --> <!-- 同上[#000000] (hex color code) main text color. Every text color can be set individually in the settings below--> . <!-- 小数分隔符,默认为[,]注:该属性只是用来显示,而在csv数据文件中,必须使用[.] (string) decimal separator. Note, that this is for displaying data only. Decimals in data xml file must be separated with a dot --> <!-- 千位分隔符,默认为空[ ] (string) thousand separator. use "none" if you don't want to separate --> 3 <!-- 如果百分数格式的数字,后面的小数位小于该属性的值,则在小数后面加0补充。如54.2%,该属性设置为3,那么显示的效果为54.200%。[] (Number) if your value has less digits after decimal then is set here, zeroes will be added --> <!--设置科学记数法的最小值 [0.000001] If absolute value of your number is equal or less then scientific_min, this number will be form
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值