HighCharts绘制JS折线图(后台传数据给前台基于JFinal框架)

/*****************************Controller(基于JFinal框架)**************/

package com.zzu.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import com.google.gson.Gson;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Page;
import com.zzu.model.Parameter;
import com.zzu.model.Record;
import com.zzu.model.Record_V;
import com.zzu.model.recordinfo;

import com.zzu.util.GeneralService;
import com.zzu.service.RecordService;

/*JS折线图方法(从后台动态传值给前台,并用这些值画折线图,实现鼠标靠近折线图上任意节点,显示该节点温度,浓度等信息)*/
    public void getProjectChart(){
         int port_id=1;
         String starttime=getPara("starttime").replace("/_/g","-");
         starttime=GeneralService.charReplace(starttime,"_","-");
         String endtime=getPara("endtime").replace("/_/g","-");
         endtime=GeneralService.charReplace(endtime,"_","-");
         int parameter_id=getParaToInt("parameter_id");
         System.out.print("parameter_id="+parameter_id);
        List<Record> records=new ArrayList<Record>();
        records=recordService.recordList(parameter_id,port_id,starttime,endtime);//获取某个时间段内某种参数对应的检测记录
        List<recordinfo> tm=new ArrayList<recordinfo>();
        for(int i=0;i<records.size();i++){
            recordinfo tm1=new recordinfo();
             Record r=records.get(i);
            tm1.setTemperature(r.getDouble("temperature"));
            tm1.setDensity(r.getDouble("density"));
            tm1.setSamping_time(formatter.format(r.getTimestamp("samping_time")));//将数据库中(bigint)samping_time以yyyy-MM-dd HH:mm:ss形式输出
            tm.add(tm1);
           }
        setAttr("tm",tm);//tm为对象数组,每个对象都有temperature和density属性
        ToGson(tm);//是为了向前台传链表List<Temperature> tm 键值对即:{temperature:值}
    
    }

public void ToGson(Object object) {
        //转换Gson格式
        Gson gson=new Gson();
        String str=gson.toJson(object);
        try {
            getResponse().getOutputStream().write(str.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

/*****************************html**************/

<script type="text/javascript">
       function doSubmit(){           //原来的折线图展示不出来原因是js里边变量和函数执行顺序没有搞正确。
                   
         var starttime=document.getElementById("starttime").value;
        
          var endtime=document.getElementById("endtime").value;
        
          var parameter_id=document.getElementById("parameter_id").value;
          var portId=document.getElementById("port_id").value;
          
          if(starttime==""){
                starttime="0000-00-00";
          }
          if(endtime==""){
                  endtime="9999-99-99";
          }
          
        // 此为正则表达式  /-/g 把所有的- 变成 _  也可以(‘-‘,‘_‘),但只替换第一个-
         starttime=starttime.replace(/-/g,‘_‘);
         endtime=endtime.replace(/-/g,‘_‘);

$.ajax({
                            
                             type:"post",
                             dataType:"json",
                             data: {"starttime":starttime,"endtime":endtime,"parameter_id":parameter_id,"port_id":portId},  //参数列表
                             async:false,
                             url:"/WaterSys/record/getProjectChart",
                            
                           success: function (data) {
                                    var Options = {

chart: {

renderTo: ‘chartPro‘,//将折线图放在id为chartPro的容器里边

type: ‘line‘//设置图类型为折线型

},

title: {

text: ‘水参数走势图‘,

x: -20 //center

},

xAxis: {
                                        title: {

text: ‘时间‘
                                           },
                                         },

yAxis: {

title: {

text: ‘数值‘
     
                                            },
                                         min: 0,
                                         plotLines: [{
                                         value: 0,
                                         width: 1,
                                        color: ‘#808080‘
                                                     }]
                                                },
            
                                        credits: { enabled:false },//去掉水印
                                        exporting:{ enabled:false},//去掉导出按钮
                                        legend: {
                                        layout: ‘vertical‘,
                                        align: ‘right‘,
                                        verticalAlign: ‘middle‘,
                                        borderWidth: 0
                                                },
          
                                       series: [{
                                           name: ‘温度‘,
                                           color:‘green‘,
                                              },{
                                           name: ‘浓度‘,
                                           color:‘red‘,
                                               }]
                                             };
                                  
                                   tm_arr=[];//建立温度数组,接收从后台传来的温度值,并赋给Options.series[0].data即series的‘温度‘值
                                   dy_arr=[];//建立浓度数组,接收从后台传来的浓度值,并赋给Options.series[1].data即series的‘浓度‘值
                                   time_arr=[];//建立时间数组,接收从后台传来的时间值,并赋给Options.xAxis.categories即xAxis的‘时间‘值
                                   
                                   for (i in data) {

var r = data[i];

tm_arr.push(r.temperature);//
                                    dy_arr.push(r.density);//
                                   time_arr.push(r.samping_time);//
                                    }
                                    Options.series[0].data = tm_arr;
                                    Options.series[1].data = dy_arr;
                                    Options.xAxis.categories = time_arr;
                                    var chart = new Highcharts.Chart(Options);
                                    },
                                    cache: false
                                    });
 };

</script>

<body >
    <table>
                <tr>
                    <td>请选择参数名称</td>
                    <td>
                        <select name="parameter_id" id="parameter_id">
                            <#list pList as pl>
                             <option value ="${pl.parameter_id}">${pl.parameter_name}</option>
                            </#list>
                        </select>
                    </td>
                    <td>请选择时间范围:</td>
                    <td><input type="text" style="width:100px" id="starttime" name="starttime" class="date" /></td>
                    <td>——</td>
                    <td><input type="text" style="width:100px" id="endtime" name="endtime" class="date" /></td>
                    <td><input type="button" onclick="doSubmit()" value="确定" /></td>
                </tr>
    </table>
    <input type="hidden" id="port_id" value="${port_id}"/>
<div id="chartPro"  style=" width: 100%; height: 100%; "  ><br/><br/><br/><center><span class="img_loading" title="加载中"></span></center></div>
 </body>

时间: 2024-08-05 04:29:01

HighCharts绘制JS折线图(后台传数据给前台基于JFinal框架)的相关文章

SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码

场景: 在实际运用场景中,当前台发起请求后,我们需要从后台返回数据给前台,这时,如果返回的数据中包含中文,则经常会出现在后台查询出来都是好好,但是传输回去就莫名的乱码了,而且,我们明明已经在 web.xml 中进行编码过滤了,但还是乱码,让人很头疼. 解决办法: 第一种:这种方法,估计很多人都知道,那就在 controller 中的每个方法的  @RequestMappering 注解中进行编码设置,如下所示: @RequestMapping(value = "/queryUserById&qu

HighCharts实现多数据折线图分列显示

HighCharts实现多数据折线图分列显示 BY ZYZ HighCharts是一个非常好用的web端画图插件,用起来非常方便,它的官方支持非常好,而且有中文API(不完全),画出来的图像也挺漂亮的.最近需要用HighCHarts绘制多数据展示对比的折线图,要求的效果类似下图. 这个图的特点是Y轴从大到小显示,多个X轴对应多个不同的折线,且每个X轴的刻度不同,每条折线的颜色也不同,且折线不交叉. 在官方的在线演示里找了许久,并没有发现可以实现这样效果的例子,虽然有多轴多折线显示的例子,但是折线

JS 折线图

echarts 折线图.需要引入:echarts.min.js <script src="${ctxStatic}/common/echarts.min.js" charset="utf-8"  type="text/javascript"></script> JS调用后台方法,得到数据 Map<String, Object> map = new HashMap<String, Object>();

使用JFreeChart绘制XY折线图(工具类设计)

准备用Java写通信的仿真平台作为毕业设计,相比matlab绘图,Java绘图需要自己去写很多工具类,博主在这采用了JFreeChart的开源解决方案,摸索着自己写了一个XY折线图工具类,话不多说贴源码,源码中写了很多注释,配了一套自己用的绘图样式,需要的童鞋可以借鉴借鉴,希望对你有帮助.源代码已上传我的github上. 首先用Maven引入Jar包 <!-- Java 绘图 --> <dependency> <groupId>jfree</groupId>

echarts折线图动态改变数据时的一个bug

echarts折线图中当增加dataZoom,修改start大于0的时候,会出现折线混乱,变成竖直的线,绘制有问题. 解决方法,在dataZoom中增加filterMode: 'empty' http://gallery.echartsjs.com/editor.html?c=xS1T_X893l&v=2

angular js 模拟获取后台的数据

在这里我们把后台的数据用一个.json文件进行代替. 项目的目录结构如下: puDongLibraryLearning----ui-router-learning ---- data-------people.json puDongLibraryLearning-test.html people.json的代码如下: [ { "id": "293", "isActive": false, "eyeColor": "b

在用UEditor往后台传数据写入数据库时,出现错误:从客户端(NewsContent=&quot;&lt;p&gt;&lt;img src=&quot;http://...&quot;)中检测到有潜在危险的 Request.。。。

解决办法: 把传数据的方式换了一下,加上 [ValidateInput(false)]就不报错了. 建议看看这个:http://www.360doc.com/content/10/0521/15/466494_28756529.shtml 觉得写得很好.

用这个插件jquery.raty.js————用于星星评价(这个案例用于后台传数据给我,前台显示星星个数)

1.引入jquery.js文件 2.引入jquery.raty.js 3.页面中放在这个:<span class="readOnly" data-path="images" ><i>4.5</i></span> 4.js: function star(obj,num){ $(obj).raty({ path: function() { return this.getAttribute('data-path');//路径

使用Canvas和Paint自己绘制一个折线图

主要就是使用了Canvas写了一个特别简单的小demo.可以手动点击每个月份的数据改变折线的位置.非常简单. 主要就是用paint在canvas上画出来的. 代码就不上了,想要的自己去下载: https://github.com/yocn/chartView?