【工作記錄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函式,我自己寫的,可以直接複製到你自己的頁面使用哦,無需修改,複製即用!
4、後臺讀取資料,並繫結到div容器: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' } } } };
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
}
]
});
}
最後,獻上幾張截圖:
選中連續資料點求和:
求和的同時,選中的資料點集合會被放大!
我只能幫你到這兒了!!歡迎交流!!
相關推薦
【工作記錄0012】highcharts 選中 連續資料點 並求 Y軸值總和 的實現
最近公司需要統計報表,並顯示在web端,所以學習了JavaScript的一個圖示類庫,也可以說是一個外掛,叫 選擇hightcharts作為web端的圖示顯示外掛的重要原因是:hightcharts是純js寫的,開源,且靈活性很強,可以對現
【工作記錄0018】Hightcharts 設定載入中動畫背景圖,防止頁面假死
使用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
【劍指offer】42、連續子數組的最大和
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播放
【工作筆記0010】asp.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迴圈建立。 然後普通的操作,好像並不能讓字串變成變數名! 因此我百度了一下,找到了下面的方法,這個就不加連結了,因為太多了 程式碼
【unity3D】【siki的坦克大戰】 【學習記錄(一)】 【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 = { // 需要在這裡手動指定入口