1. 程式人生 > >【工作記錄0012】highcharts 選中 連續資料點 並求 Y軸值總和 的實現

【工作記錄0012】highcharts 選中 連續資料點 並求 Y軸值總和 的實現

        最近公司需要統計報表,並顯示在web端,所以學習了JavaScript的一個圖示類庫,也可以說是一個外掛,叫

        選擇hightcharts作為web端的圖示顯示外掛的重要原因是:hightcharts是純js寫的,開源,且靈活性很強,可以對現有模板進行二次開發設計。但有一點缺點:當資料量大時圖示渲染較慢一點點,但也還是在能接受的範圍內的。

        相信用過hightcharts的童鞋一定遇到過這樣的問題:我直接按住滑鼠左鍵,選中一些資料點,然後鬆開左鍵,可以直接求所選連續點資料的和嗎?

        答案當然是肯定的!接下來我就教大家怎麼實現這個功能。

        1、首先,肯定是要先引入 highcharts 的類庫,因為還要用到jQuery,所以如下:

<script src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="http://cdn.hcharts.cn/highcharts/highcharts.js" type="text/javascript"></script>
        2、建立一個div容器來放置 highcharts 的圖示:
<div id="container" style="min-width:400px;height:400px"></div> 

        3、設定 hightcharts 主題屬性,特別注意chart下的events事件中的selection函式,我自己寫的,可以直接複製到你自己的頁面使用哦,無需修改,複製即用!

Highcharts.theme = {
	colors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'],
	chart: {
		backgroundColor: {
			linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },
			stops: [
				[0, 'rgb(255, 255, 255)'],
				[1, 'rgb(240, 240, 255)']
			]
		},
		borderWidth: 2,
		plotBackgroundColor: 'rgba(255, 255, 255, .9)',
		plotShadow: true,
		plotBorderWidth: 1,
		events: {
                //<span style="color:#FF0000;">重要的函式部分,可以直接複製使用</span>
                <span style="color:#FF0000;">selection: function(event) {
                  var text = "", label;
                  if (event.xAxis) {
                      var series = event.target.series;//獲取所有資料列
                      for(var j = 0; j < series.length; j++){
                            if(series[j].visible){
                              var total = 0;
                              var data = series[j].data;
                              var selectedmin = parseInt(event.xAxis[0].min < 0 ? -1 : event.xAxis[0].min) + 1;
                              var selectedmax = parseInt(event.xAxis[0].max) + 1;
                              for (var i = selectedmin; i < selectedmax; i++) {
                                  total += data[i].y;
                              }
                              text += series[j].name + ":從 " + data[selectedmin].category + " 到 " + data[selectedmax - 1].category + ",總和:" + total + "<br />";                      
                            }
                      }
                      label = this.renderer.label(text, 80, 90)
                                .attr({
                                    fill: Highcharts.getOptions().colors[0],
                                    padding: 10,
                                    r: 5,
                                    zIndex: 8
                                })
                                .css({
                                    color: '#FFFFFF'
                                })
                                .add();
                      //淡出效果,設定5秒後消失
                      setTimeout(function() {
                          label.fadeOut();
                      }, 5000);
                  }
              }
          },
          zoomType: 'x'//放大方式,x表示橫向放大</span>
	},
	title: {
		style: {
			color: '#000',
			font: 'bold 16px "Trebuchet MS", Verdana, sans-serif'
		}
	},
	subtitle: {
		style: {
			color: '#666666',
			font: 'bold 12px "Trebuchet MS", Verdana, sans-serif'
		}
	},
	xAxis: {
		gridLineWidth: 1,
		lineColor: '#000',
		tickColor: '#000',
		labels: {
			style: {
				color: '#000',
				font: '11px Trebuchet MS, Verdana, sans-serif'
			}
		},
		title: {
			style: {
				color: '#333',
				fontWeight: 'bold',
				fontSize: '12px',
				fontFamily: 'Trebuchet MS, Verdana, sans-serif'

			}
		}
	},
	yAxis: {
		minorTickInterval: 'auto',
		lineColor: '#000',
		lineWidth: 1,
		tickWidth: 1,
		tickColor: '#000',
		labels: {
			style: {
				color: '#000',
				font: '11px Trebuchet MS, Verdana, sans-serif'
			}
		},
		title: {
			style: {
				color: '#333',
				fontWeight: 'bold',
				fontSize: '12px',
				fontFamily: 'Trebuchet MS, Verdana, sans-serif'
			}
		}
	},
	legend: {
		itemStyle: {
			font: '9pt Trebuchet MS, Verdana, sans-serif',
			color: 'black'

		},
		itemHoverStyle: {
			color: '#039'
		},
		itemHiddenStyle: {
			color: 'gray'
		}
	},
	labels: {
		style: {
			color: '#99b'
		}
	},

	navigation: {
		buttonOptions: {
			theme: {
				stroke: '#CCCCCC'
			}
		}
	}
};
        4、後臺讀取資料,並繫結到div容器:
var xData;//x軸資料
var todayAll; //y軸資料
var dialogTitleDate;//圖示標題

$(function(){
        dialogTitleDate = "近30天";
	var Url ='/searchdata.aspx?t='+ new Date().getTime();
             $.ajax({
            url: Url,
            data: { act:"get" },//後臺引數傳遞
            type: 'POST',
            //調小超時時間會引起異常
            timeout: 30000,
            //是否使用非同步傳送
            async: false,
            //請求成功後觸發
            success: function (data) {   
           
             var result = eval("(" + data + ")");//data是後臺傳遞的一個數據包,最好用json序列化,類物件中包含有X軸資料和y軸資料
             if(result.length == 1){
                 xData = result[0].dateList;
                 todayAll = result[0].todayAllList;
             }
            } });
	zhexiantu();
}
function zhexiantu() {
	//資料繫結
        $('#container').highcharts({
            title: {
                text: dialogTitleDate,//圖示標題
                margin: 40,
                style: {
                    fontSize: '20px'
                }
            },
            subtitle: {
              text: '圖示副標題',
              y: 32
            },
            credits: {
                enabled: false   //右下角不顯示LOGO
            },
            exporting: {
                buttons: {
                    contextButton: {
                        enabled: false,
                        menuItems: null
                    }
                },
                enabled: true
            },
            xAxis: {
                categories:xData,//X軸資料,後臺讀取的,一個數組,或list
                labels: {
                    rotation: 0,
                    align: 'center',
                    style: {
                        fontSize: '14px'
                    }
                }
            },
            yAxis: {
                min: 0,
                allowDecimals:true, //是否允許刻度有小數
                title: {
                    text: 'Y軸顯示標題 '
                },           
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }],
                style: {
                    fontSize: '14px',
                    fontFamily: 'Verdana, sans-serif'
                },
                labels: {
                    formatter: function () {
                        return this.value;
                    }
                },
            },
            tooltip: {
                valueSuffix: ''
            },
            plotOptions: {
                column: {
                    dataLabels: {
                        enabled: true,//是否在資料點上顯示數值
                        align: 'center',
                        style: {
                            fontSize: '10px',
                            fontWeight: 'bold'
                        },
                        color: "#FF0000"
                    }
                }
            },                                                                                                                            
            series: [{
                type: 'column', 
                name: '柱形圖',
                data:todayAll  //Y軸資料,後臺讀取的,一個數組,或list
            }
            ]
        });
}

        最後,獻上幾張截圖:

選中連續資料點求和:

求和的同時,選中的資料點集合會被放大!


        我只能幫你到這兒了!!歡迎交流!!

相關推薦

工作記錄0012highcharts 選中 連續資料 Y總和實現

        最近公司需要統計報表,並顯示在web端,所以學習了JavaScript的一個圖示類庫,也可以說是一個外掛,叫         選擇hightcharts作為web端的圖示顯示外掛的重要原因是:hightcharts是純js寫的,開源,且靈活性很強,可以對現

工作記錄0018Hightcharts 設定載入中動畫背景圖,防止頁面假死

使用ajax非同步請求資料並顯示到圖示中,當每頁顯示圖示數量或者資料列越多時,渲染越慢,等待時間更多,最終造成了頁面的假死狀態(頁面在完成資料請求和渲染新圖之前沒什麼動靜)。為了防止假死狀態,更為了更好的使用者體驗,hightcharts提供了載入中動畫配置。 1.high

工作記錄Found Banned Dependency: commons-logging:commons-logging 依賴衝突解決

【問題概述】      在使用maven構建專案的時候,偶爾會遇到jar包依賴衝突的問題,比如: [WARNING] Rule 2: org.apache.maven.plugins.enforcer.BannedDependencies failed with m

工作記錄2011-07-30

1-   為AGENT增加了主動模式,應用服務可以主動連線AGENT,從而讓地址無法確定的APP服務可以掛接到地址固定的AGENT上提供服務。 posted on 2011-07-30 12:42 飯中淹 閱讀(407) 評論(0)  編輯 收藏 引用 所屬

問題記錄系列the resource is not on the build path of a java project

搭建 關閉 spring源碼 remove 環境 eclips 右鍵 生產 ldp 在eclipse中新建了一個maven項目搭建Spring源碼閱讀環境,創建一個bean生產getter和setter方法的時候報錯“the resource is not on the b

劍指offer42、連續子數組的最大和

class 分享 因此 eat 組成 連續 最大和 累加 ret 題目 輸入一個整型數組,數組裏有正數也有負數。數組的一個或連續多個整數組成一個子數組。求所有子數組的最大和。要求時間復雜度為O(n) 思路一 試著從頭到尾累加每個數字,若發現有子數組和小於零,則加上後面的數字

工作分解法IT人,你的工作“輕松”麽?

不難 str 所有 新技術 外部 睡眠 開發 商戶 年齡 一.前言 假如讀者是一個老板,下面有兩位員工,工作難度一樣,完成量一樣,人品和責任心也一樣。一位每天加班加點,廢寢忘食的工作;而另外一位每天在座位上喝著咖啡,非常的輕松自如的工作。您會更器重哪一位? 答案很明顯,一定

ChneChen的Blog個人用,純資料文件庫..順便加了自己的雜七雜八文字..   借CSDN一角,記錄一些有價值的資料..

個人用,純資料文件庫.. 順便加了點自己的文字.. 借CSDN一角 記錄一些有價值的資料.. 推薦:Firefox 3.5以上版本瀏覽! 申明:  本BLOG絕大多數資料為轉載,  轉載資料本人多儲存轉載地址,  版權作者如認為轉載牽涉版權,  請

工作記錄-本地WEB聲音不連續

1、使用vlc播放web端儲存的碼流,確實存在音訊斷續的問題。2、使用elecard stream eye軟體分析音視訊的時間戳,發現音訊的時間戳的pcr要比pts大2160,因此建議修改為一致;但修改為一致後,仍存在音訊斷續的問題。3、將音訊檔案分離出來,單獨使用vlc播放

工作筆記0010asp.net後臺Request.QueryString獲取的url中文引數亂碼解決方案

通常頁面前端向後臺傳遞引數有兩種方法: 1.表單提交。 採用form標籤,將需要提交的內容放到form標籤裡面, 後臺用string str = Request.Form["標籤名字"].ToStri

DP經典系列最大連續子序列和

For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line contains three integers

工作筆記0023修改已提交的 git comments 的作者資訊(Changing author info)

最近想把本地的程式碼庫上傳到github上,結果上傳完畢後才發現作者莫名其妙變成了其他人 追究原因,發現我用的 smartgit 工具,當初在配置 Comment 資訊時,填寫了正確的 username,但卻隨便填寫了一個 useremail為“[email p

Java小專案一個Socket連續傳輸多個檔案

      想給前短時間做的那個山寨QQ加一個傳輸檔案的功能,因為那個山寨QQ每個客戶端和伺服器端就一個Socket連線用ObjectOutputStream進行通訊,現在要加一個DataOutputStream來傳輸檔案,所以先了寫這個試驗下。      思路:    

Python學習筆記for迴圈連續建立物件_練習demo~

前言: 在獲取CSDN訪問量的小專案中,需要獲取我所有部落格,建立了一個Blog類,所以需要建立n多個物件。 所以就需要用一個for迴圈建立。 然後普通的操作,好像並不能讓字串變成變數名! 因此我百度了一下,找到了下面的方法,這個就不加連結了,因為太多了 程式碼

unity3Dsiki的坦克大戰 學習記錄(一) 01-07

理解前後方代表Z軸,上下方代表Y軸,左右方代表X軸 1.FixedUpdate()與Update()的區別 Update() 和 FixedUpdate()在遊戲中都會在更新的時候自動迴圈呼叫。 但是Update是在每次渲染新的一幀的時候才會呼叫,也就是說,這個

劍指offer二叉搜索樹轉雙向鏈表,C++實現

pointer 題目 size point nod off log tco public 原創博文,轉載請註明出處!# 題目 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。要求不能創建任何新的節點

字符串BZOJ上面幾個AC自動機最為字串出現次數的題目

參考 none ac自動機 其他 view lose 細節 pen max (一下只供自己復習用,目的是對比這幾個題,所以寫得不詳細。需要細節的可以參考其他博主) 【BZOJ3172:單詞】 題目: 某人讀論文,一篇論文是由許多(N)單詞組成。但他發

火爐煉AI機器學習053-資料降維絕招-PCA和核PCA

【火爐煉AI】機器學習053-資料降維絕招-PCA和核PCA (本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 主成分分析(Principal Component Analysis, PCA)可以

自然語言處理良心資源,不開會後悔的那種

ACL文章連結 http://www.aclweb.org/anthology/ 2016年ACL-WMT機器翻譯資料集 PaperWeekly http://rsarxiv.github.io/ 中國NLP聯盟(牆裂推薦) ht

webpack外掛使用在開發中快速掌握使用Webpack構建web應用程式

1.webpack-dev-server外掛的基本使用 入門程式 const path = require('path'); // 匯出一個Webpack的配置物件(通過node中的模組操作,向外暴露了一個配置物件) module.exports = { // 需要在這裡手動指定入口