济南个人网站建设,每天能赚30 50元的,dedecms5.7 财经网站,沈阳正规男科医院Highcharts 是一个使用javascript 脚本来生成图表的工具#xff0c;和jfreechart 作用类似#xff0c;都用来生成各种图表#xff0c;并支持图片的导出和打印。
从官网 www.highcharts.com 上下载的压缩表中的example中有各种图表的例子。
要编写生成图表的例子建议从 文…Highcharts 是一个使用javascript 脚本来生成图表的工具和jfreechart 作用类似都用来生成各种图表并支持图片的导出和打印。
从官网 www.highcharts.com 上下载的压缩表中的example中有各种图表的例子。
要编写生成图表的例子建议从 文件名后带 basic 的文件看起看到例子后你会发现highcharts使用起来时非常简单的我们要做的仅仅是把数据组织好让在页面onload时把数据设置到 组件Highcharts.Chart中即可。
一、 改改自带的例子
先来个例子
第一步 下载Highcharts-2.1.3.zip 包 和 jquery-min-1.4.2.js
以下两个文件的下载地址
http://www.highcharts.com/download
http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
第二步 创建一个html文件在文件的head标签部分加入对相关js文件的引入
script typetext/javascript srchttp://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js/script
Highcharts的核心文件
script typetext/javascript src../js/highcharts.js/script
处理导出图片功能的js文件
script typetext/javascript src../js/modules/exporting.js/script
第三步编写相关js代码
在上面的导入js文件代码后继续加入以下代码
!-- 2. Add the JavaScript to initialize the chart on document ready --script typetext/javascriptvar chart;$(document).ready(function() {chart new Highcharts.Chart({chart: {renderTo: container,defaultSeriesType: line,marginRight: 130,marginBottom: 25},title: {text: Monthly Average Temperature,x: -20 //center},subtitle: {text: Source: WorldClimate.com,x: -20},xAxis: {categories: [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]},yAxis: {title: {text: Temperature (°C) },plotLines: [{value: 0,width: 1,color: #808080}]},tooltip: {formatter: function() {return b this.series.name /bbr/this.x : this.y °C;}},legend: {layout: vertical,align: right,verticalAlign: top,x: -10,y: 100,borderWidth: 0},series: [{name: Tokyo,data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]}, {name: New York,data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]}, {name: Berlin,data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]}, {name: London,data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]}]});});/script
第四步准备存放图片的容器
在body 标签中加入
div idcontainer stylewidth: 800px; height: 400px; margin: 0 auto/div
运行下试试。
这样就完成了一个最基本的曲线图的例子。
接下来的是如果我们要自己实现一个该怎么弄
很简单修改例子代码就可以了用不着自己重新写代码。
先对比刚才写的例子的代码和 效果看看那些东西我们可以修改 很明显标题的文字、纵轴的单位横轴的文字这些都要修改数据部分先不管。
于是在html文件中修改 标题为 我的标题
修改代码为
title: {text: 我的标题,x: -20 //center}
保存再打开html 我自己在试验的使用用的是ultraEdit 编辑器编辑的html文件发现文件里面的摄氏度出现乱码
当时没在意用firefox查看源文件把 摄氏度这个符号给copy 过来了保存后打开时没出现效果。
然后查看源文件的时候出现乱码应该是编辑器把文件的编码修改了所以在改的时候最好用记事本保存时保存为utf-8编码的。或者干脆放在我们的开发工具中修改。
改后的效果如下 接着把 子标题、纵轴的单位 和 鼠标移上图片时提示中的内容也进行修改
subtitle: {//修改子标题text: 来源bits.digitalchina.com,x: -20},yAxis: {//修改纵轴单位文字title: {text: 温度 (摄氏度)},plotLines: [{value: 0,width: 1,color: #808080}]},tooltip: {formatter: function() {return b this.series.name /bbr/this.x : this.y 摄氏度;}}, 修改这些东西都很简单只用在html中找到这些字符然后替换就可以了。 接下来的是数据了。
我们看一下横轴的数据这些值都定义在
xAxis: {categories: [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
},
我们再想想这个曲线是怎么画出来的
无非是X、y轴的值确定一点多点连成线。
查看代码中表示数据的部分
series: [{name: Tokyo,data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]}, {name: New York,data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]}, {name: Berlin,data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]}, {name: London,data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]}]
上面的series 属性是一个数组该数组中有四个json 对象而图上刚好是四条线所以应该是一个json对象对应一条线而且name属性值也说明了这点。
我们现在只要弄懂一条线是怎么来的就好办了。
拿其中一条来说
{name: Tokyo, data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]}
表示的是Tokyo 的数据data里面存放的是一维数组查看tokyo对应的那条线发现
这些值刚好是那些点的纵轴的值。 那横轴呢
横轴刚好是xAxis:
{categories: [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
},
这时你会想到原来xAxis 就是表示点的x轴线值而xAxis 这个数组的长度也肯定和data的长度一样这样刚好一个确定纵轴一个确定横轴。
这样就可以表示tokyo这个城市 Jan 的温度 是 7.0 Feb 的温度是 6.9 ........... 现在问你如果只要一条线呢把 series 中只保留一个元素即可。如
series: [{name: Tokyo,data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]}] 如果只要 Jan, Feb Mar 这三个月的温度呢? 修改 data只要前三个月的数字当然还要修改 xAxis
series: [{name: Tokyo,data: [7.0, 6.9, 9.5]}]xAxis: {categories: [Jan, Feb, Mar]
},
现在我想图片上最明显的要修改的部分都可以改了我们应该可以使用它了。 二、自己动手写一个jsp加载从服务端获取的数据。
第一步、在web工程下 新建一个jsp 将相关的js文件放到项目中
还是拷贝刚才的javascript 和 html代码 到jsp中
发布项目打开这个jsp以确保引入的js文件路径没有问题。 第二步、准备服务端代码我们准备还是用刚才的那个气温的例子
在服务端拼接好series 属性需要的字符串可以就用servlet完成
核心代码如下
doPost(......){
//........
Out.println(
[
{name: Tokyo,data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]},
{name: New York,data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]},
{name: Berlin,data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]},
{name: London,data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]}
]
);
//......
}
Web.xml 中的配置
servletservlet-namepp/servlet-nameservlet-classcn.dc.serverlt.HighChartsServlet/servlet-class/servletservlet-mappingservlet-namepp/servlet-nameurl-pattern/pp.do/url-pattern/servlet-mapping
第三 步、修改jsp:
script typetext/javascript$(document).ready(function() {var options {chart: {renderTo:container,defaultSeriesType: line,marginRight: 130,marginBottom: 25},credits:{href:http://bits.digitalchina.com,text:bits},title: {text: 昨日系统访问数量统计图,x: -20 //center},subtitle: {text: Source: bits,x: -20},xAxis: {categories: []},yAxis: {title: {text: 个/小时},plotLines: [{value: 0,width: 1,color: #808080}]},tooltip: {formatter: function() {return b this.series.name /bbr/this.x : this.y 个;}},legend: {layout: vertical,align: right,verticalAlign: top,x: -10,y: 100,borderWidth: 0},exporting: {filename: chart,type: image/png,url: http://localhost:8888/dcweb/pp.do,width: 800},series:[]};$.get(/infoAdmin/visitorStatistics.do, function(data) {// Create the chartalert(data);data eval((data));alert(data);options.series.push(data);var chart new Highcharts.Chart(options);});});/script
这里我没有先定义chart 而是先定义一个普通的javascript 对象options,
然后给其设置一个series 的数组属性值是空的
然后发送异步请求获取数据
将响应数据做处理被设置到options 对象的series属性上。
这样options 对象实际上有了Highcharts.Chart 所需的所有配置属性信息。
我们在用options 来构建一个 Highcharts.Chart 对象。 之所以没有直接先定义 Highcharts.Chart 是因为定义之后不能直接在初始化时设置值而图表是在产生new Highcharts.Chart 对象后立即生成的所以肯定就没有数据了。
到现在我也不清楚里面的每个参数是做什么的但是可以查文档以下是文档的访问地址http://www.highcharts.com/ref/ 文档还不知道怎么下载下来大家只能先看在线的文档了。
注意看的时候对照例子中的js代码这样你大概就能知道一些基本参数的作用了。 我们的项目中用的话应该不会要很复杂的功能所以能基本应付开发需要。 二、怎么去掉图表右下角的 Highcharts.com 的标志
1.最笨的方法 改源码查找 highcharts.com 这是我首先想到的。
2. 查看api时发现了
credits:{href:http://bits.digitalchina.com,text:bits}
这样就可以随意修改成我们自己的了。 二、图片导出怎么变成我们自己的呢而不是每次都请求
Exports.highcharts.com
本来如果要是没有中文乱码的话我也不会去找替代方案。
我们点击导出图片的时候实际上是吧svg图片数据以post请求的方式发送给了
Exports.highcharts.com 该站点是以php程序出来这些数据的。
有兴趣的同志可以用firebug或httpwatch工具查看下发送的请求数据
现在知道是发svg图片数据发送给服务端去处理的那么要解决中文乱码就小菜一碟了
request.setCharacterEncoding(utf-8);
就可以搞定了。 这个是从某位高手那里找来的老外写的用java来处理svg 图片数据导出各种图片。
使用的是apache 的batik, 必须下载batik的jar包
这个包是干嘛的我现在只知道是用来将svg 图片数据转成各种格式图片的。 代码如下
package cn.dc.serverlt;import java.io.IOException;
import java.io.StringReader;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.fop.svg.PDFTranscoder;/**
* Servlet implementation class for the batik Transcoder
* Thanks przemyslaw
*/
public class HighChartsServlet extends HttpServlet {private static final long serialVersionUID 3920224595120519682L;public HighChartsServlet() {super();} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{request.setCharacterEncoding(utf-8);String type request.getParameter(type);String svg request.getParameter(svg);ServletOutputStream out response.getOutputStream();if (null ! type null ! svg){// This line is necessary due to a bug in the highcharts SVG generator for IE// Im guessing it wont be needed later.svg svg.replaceAll(:rect, rect); String ext ;Transcoder t null;if (type.equals(image/png)) {ext png;t new PNGTranscoder();} else if (type.equals(image/jpeg)) {ext jpg;t new JPEGTranscoder();} else if (type.equals(application/pdf)) {ext pdf;t new PDFTranscoder();} else if (type.equals(image/svgxml)) {ext svg; }response.addHeader(Content-Disposition, attachment; filenamechart.ext);response.addHeader(Content-Type, type);if (null ! t){TranscoderInput input new TranscoderInput(new StringReader(svg));TranscoderOutput output new TranscoderOutput(out);try {t.transcode(input,output);} catch (TranscoderException e){out.print(Problem transcoding stream. See the web logs for more details.);e.printStackTrace();}} else if (ext svg){out.print(svg);} else {out.print(Invalid type: type);}} else {response.addHeader(Content-Type, text/html);out.println(Usage:\n\tParameter [svg]: The DOM Element to be converted.\n\tParameter [type]: The destination MIME type for the elment to be transcoded.);}out.flush();out.close(); }
}
文章转载自: http://www.morning.nrpp.cn.gov.cn.nrpp.cn http://www.morning.mpngp.cn.gov.cn.mpngp.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn http://www.morning.ywpwg.cn.gov.cn.ywpwg.cn http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.fcxt.cn.gov.cn.fcxt.cn http://www.morning.tddrh.cn.gov.cn.tddrh.cn http://www.morning.sqgqh.cn.gov.cn.sqgqh.cn http://www.morning.sbkb.cn.gov.cn.sbkb.cn http://www.morning.wnhsw.cn.gov.cn.wnhsw.cn http://www.morning.bndkf.cn.gov.cn.bndkf.cn http://www.morning.jcrfm.cn.gov.cn.jcrfm.cn http://www.morning.rhwty.cn.gov.cn.rhwty.cn http://www.morning.pslzp.cn.gov.cn.pslzp.cn http://www.morning.ygmw.cn.gov.cn.ygmw.cn http://www.morning.mggwr.cn.gov.cn.mggwr.cn http://www.morning.xflzm.cn.gov.cn.xflzm.cn http://www.morning.pqhfx.cn.gov.cn.pqhfx.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.xkwrb.cn.gov.cn.xkwrb.cn http://www.morning.sfqtf.cn.gov.cn.sfqtf.cn http://www.morning.kjdxh.cn.gov.cn.kjdxh.cn http://www.morning.wgbmj.cn.gov.cn.wgbmj.cn http://www.morning.mydgr.cn.gov.cn.mydgr.cn http://www.morning.xgmf.cn.gov.cn.xgmf.cn http://www.morning.tdcql.cn.gov.cn.tdcql.cn http://www.morning.bwnd.cn.gov.cn.bwnd.cn http://www.morning.kgnrh.cn.gov.cn.kgnrh.cn http://www.morning.grryh.cn.gov.cn.grryh.cn http://www.morning.clzly.cn.gov.cn.clzly.cn http://www.morning.plqqn.cn.gov.cn.plqqn.cn http://www.morning.dydqh.cn.gov.cn.dydqh.cn http://www.morning.bqxxq.cn.gov.cn.bqxxq.cn http://www.morning.nmkbl.cn.gov.cn.nmkbl.cn http://www.morning.ywpcs.cn.gov.cn.ywpcs.cn http://www.morning.fygbq.cn.gov.cn.fygbq.cn http://www.morning.cnlmp.cn.gov.cn.cnlmp.cn http://www.morning.tqrjj.cn.gov.cn.tqrjj.cn http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn http://www.morning.qcnk.cn.gov.cn.qcnk.cn http://www.morning.rqmr.cn.gov.cn.rqmr.cn http://www.morning.gtqx.cn.gov.cn.gtqx.cn http://www.morning.xcszl.cn.gov.cn.xcszl.cn http://www.morning.zxqqx.cn.gov.cn.zxqqx.cn http://www.morning.rwqk.cn.gov.cn.rwqk.cn http://www.morning.hkgcx.cn.gov.cn.hkgcx.cn http://www.morning.bwkzn.cn.gov.cn.bwkzn.cn http://www.morning.fksdd.cn.gov.cn.fksdd.cn http://www.morning.kxqwg.cn.gov.cn.kxqwg.cn http://www.morning.symgk.cn.gov.cn.symgk.cn http://www.morning.slnz.cn.gov.cn.slnz.cn http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.rwzmz.cn.gov.cn.rwzmz.cn http://www.morning.bgxgq.cn.gov.cn.bgxgq.cn http://www.morning.cfccp.cn.gov.cn.cfccp.cn http://www.morning.spwln.cn.gov.cn.spwln.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.bpmfq.cn.gov.cn.bpmfq.cn http://www.morning.cnqwn.cn.gov.cn.cnqwn.cn http://www.morning.dbylp.cn.gov.cn.dbylp.cn http://www.morning.pdwzr.cn.gov.cn.pdwzr.cn http://www.morning.drqrl.cn.gov.cn.drqrl.cn http://www.morning.bqpg.cn.gov.cn.bqpg.cn http://www.morning.kltmt.cn.gov.cn.kltmt.cn http://www.morning.mxdhy.cn.gov.cn.mxdhy.cn http://www.morning.wchsx.cn.gov.cn.wchsx.cn http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn http://www.morning.sfnr.cn.gov.cn.sfnr.cn http://www.morning.yldgw.cn.gov.cn.yldgw.cn http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.dhyzr.cn.gov.cn.dhyzr.cn http://www.morning.tfrmx.cn.gov.cn.tfrmx.cn http://www.morning.qrdkk.cn.gov.cn.qrdkk.cn http://www.morning.njntp.cn.gov.cn.njntp.cn http://www.morning.hjlwt.cn.gov.cn.hjlwt.cn http://www.morning.sfdky.cn.gov.cn.sfdky.cn http://www.morning.wxfjx.cn.gov.cn.wxfjx.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn