第一次用Highcharts画一个温度湿度变化的图片,因为不熟悉跳了好多坑,特记录下:

一、JS引用

<script src="~/Scripts/jquery.min.js"></script>
<script src="~/Scripts/moment.js"></script>
<script src="~/Scripts/Highcharts-7.0.3/code/highcharts.js"></script>
<script src="~/Scripts/Highcharts-7.0.3/code/modules/exporting.js"></script>
<script src="~/Scripts/Highcharts-7.0.3/code/modules/data.js"></script>
<script src="~/Scripts/Highcharts-7.0.3/code/modules/series-label.js"></script>
<script src="~/Scripts/Highcharts-7.0.3/code/modules/no-data-to-display.js"></script>

二、添加图表的容器

<div id="container"></div>

三、设置Highcharts的汉化,和不使用UTC时间,在这里折腾时间够久,一把泪

Highcharts.setOptions({
lang: {
noData: '暂无数据',
contextButtonTitle: "图表导出菜单",
decimalPoint: ".",
downloadJPEG: "下载JPEG图片",
downloadPDF: "下载PDF文件",
downloadPNG: "下载PNG文件",
downloadSVG: "下载SVG文件",
drillUpText: "返回 {series.name}",
loading: "加载中",
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
noData: "没有数据",
numericSymbols: ["千", "兆", "G", "T", "P", "E"],
printChart: "打印图表",
resetZoom: "恢复缩放",
resetZoomTitle: "恢复图表",
shortMonths: ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"],
thousandsSep: ",",
weekdays: ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]
},
global: {
useUTC: false
}
});

三、初始化Highcharts

var chart = Highcharts.chart(containerId,
{
credits: {
enabled: false
},
noData: {
style: {
fontWeight: 'bold',
fontSize: '15px',
color: '#303030'
}
},
data: {
csv: csvData,
parsed: function(d) {
console.log(d);
},
parseDate: function(d) {
return GetTimestamp(d);
}
},
title: {
text: title
},
xAxis: {
type: 'datetime',
//tickInterval: 12 * 3600 * 1000, // 坐标轴刻度间隔为一星期
tickWidth: 0,
gridLineWidth: 1,
labels: {
align: 'left',
x: 3,
y: -3
},
//时间格式化字符
//默认会根据当前的刻度间隔取对应的值,即当刻度间隔为一周时,取 week 值
dateTimeLabelFormats: {
//day: '%H:%M'
day: '%b月.%e日 %H:%M'
}
},
yAxis: [
{ // 第一个 Y 轴,放置在左边(默认在坐标)
title: {
text: null
},
labels: {
align: 'left',
x: 3,
y: 16,
format: '{value:.,0f}'
},
showFirstLabel: false
}, { // 第二个坐标轴,放置在右边
linkedTo: 0,
gridLineWidth: 0,
opposite: true, // 通过此参数设置坐标轴显示在对立面
title: {
text: null
},
labels: {
align: 'right',
x: -3,
y: 16,
format: '{value:.,0f}'
},
showFirstLabel: false
}
],
legend: {
align: 'left',
verticalAlign: 'top',
y: 20,
floating: true,
borderWidth: 0
},
tooltip: {
shared: true,
crosshairs: true,
// 时间格式化字符
// 默认会根据当前的数据点间隔取对应的值
// 当前图表中数据点间隔为 1天,所以配置 day 值即可
dateTimeLabelFormats: {
second: '%b月.%e日 %H:%M:%S',
minute: '%b月.%e日 %H:%M',
hour: '%b月.%e日 %H:%M',
day: '%b月.%e日',
week: '%b月.%e日 ',
month: '%y年.%b月',
year: '%Y年'
}
},
plotOptions: {
series: {
cursor: 'pointer',
point: {
events: {
// 数据点点击事件
// 其中 e 变量为事件对象,this 为当前数据点对象
click: function(e) {
//$('.message').html(Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) +
// ':<br/> 值:' +
// this.y);
}
}
},
marker: {
lineWidth: 1
}
}
},
events: {
}
});

关键点:

A、因为Highcharts使用的是UTC时间会导致时间变化对不上,解决办法 全局设置useUTC为false,并且重写 data下属的parseDate 方法,使用moment 把时间转换成时间戳

 data: {
csv: csvData,
parsed: function(d) {
console.log(d);
},
parseDate: function(d) {
return GetTimestamp(d);
}
},
  function GetTimestamp(strDateTime) {
return moment(strDateTime).valueOf();
}

B、因为数据是动态增加的 所以需要获取最新的数据,动态添加到图标里面,我使用的Csv格式的数据,

addPoint第一个参数为数据项,需要转换成时间戳,第一个参数的数组的第二项为值,需要转换为数据类型,我最早就是没有转换,图表画出一段空白...........

多点连续添加,需将第二个参数设置为false,使用redraw函数来一次性重绘

  var lines = item.Csv.split('\r\n');
// 遍历每一行
$.each(lines,
function(lineNo, line) {
if (lineNo !== 0 && line !== "") {
var items = line.split(',');
var time = GetTimestamp(items[0]);
gInchart.series[0].addPoint([time, parseFloat(items[1])], false, false);
gInchart.series[1].addPoint([time, parseFloat(items[2])], false, false);
}
});
gInchart.redraw();

Highcharts入坑记的更多相关文章

  1. Kylo 入坑记

    一.概述 Kylo,作为一个基于 Spark 和 NiFi 的开源数据湖编排框架,解决对数据湖获取.治理.感知和技术支持等诸多问题.Kylo 将数据湖的很多功能自动化,包括数据接入.准备.分析发现.P ...

  2. Hadoop入坑记

    Hadoop入坑记 按照官方给的伪分布式配置 etc/hadoop/core-site.xml: <configuration> <property> <name> ...

  3. Spring Cloud Gateway入坑记

    Spring Cloud Gateway入坑记 前提 最近在做老系统的重构,重构完成后新系统中需要引入一个网关服务,作为新系统和老系统接口的适配和代理.之前,很多网关应用使用的是Spring-Clou ...

  4. conda命令入坑记

    conda命令入坑记 本人使用的软件版本: TypeError: LoadLibrary() argument 1 must be str, not None 网上太多的资料,大多都是在讲path的设 ...

  5. ALS部署Spark集群入坑记

    [Stage 236:> (0 + 0) / 400]17/12/04 09:45:55 ERROR yarn.ApplicationMaster: User class threw excep ...

  6. Day25 前端自学日记——入坑记

    一 学习契机 今年是走出校门的第一个年头,进入了一家还算不错的公司,领着一份还算不错的薪水,在外人眼中,似乎这样已经不错了,只要我努力好好做,前程一片光明.可事实真是这样吗?两份实习经历都指向我应该从 ...

  7. 【netcore入坑记】 .Net core UseRowNumberForPaging 分页报错 SQL Server 2008 R2 EntityFrameworkCore

    异常环境: netcore版本:.Net Core 2.1 efcore版本:Microsoft.EntityFrameworkCore.SqlServer 2.1.1 sql sqlserver 版 ...

  8. gRPC入坑记

    概要 由于gRPC主要是谷歌开发的,由于一些已知的原因,gRPC跑demo还是不那么顺利的.单独写这一篇,主要是gRPC安装过程中的坑太多了,记录下来让大家少走弯路. 主要的坑: 如果使用PHP.Py ...

  9. Jenkins入坑记

    记录一遍Jenkins初级使用教程 一,安装 (操作系统 centerOS7) 1-1.本次使用的是rpm包安装方式,在Jenkins官网下载rpm安装文件 下载地址: https://pkg.jen ...

随机推荐

  1. Python Django(WEB电商项目构建)

    (坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...

  2. 执行find / -name *.sh时报错 find: 路径必须在表达式之前: start-ressvr-release.sh

    想查找一个包含4000多文件的目录下所有.sh结尾的文件 使用命令     find  ./ -name *.sh     (本身已经在要查找的目录里了) 结果报错:  解决方法一:find ./ - ...

  3. mysql-proxy负载均衡

    1.下载mysql-proxy包 2.解压并启动 tar zxvf mysql-proxy....tar mv mysql-proxy... /user/local/proxy cd /usr/loc ...

  4. java在方法中获取request对象

    在spring的普通类中: HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getReques ...

  5. BBS论坛(二十)

    20.1.cms添加轮播图后台逻辑代码完成 (1)apps/models.py from exts import db from datetime import datetime class Bann ...

  6. 从锅炉工到AI专家(4)

    手写数字识别问题 图像识别是深度学习众多主流应用之一,手写数字识别则是图像识别范畴简化版的入门学习经典案例.在TensorFlow的官方文档中,把手写数字识别"MNIST"案例称为 ...

  7. Android Studio代码行数统计插件Statistics

    Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代码行数非常方便,也很详细. 1,首先肯定是将插件下载下来,下载地址: ...

  8. InterlliJ Debug方式启动:method breakpoints may dramatically show down debugging

    使用idea在DEBUG的时候出现Method breakpoints may dramatically slow down debugging, 如图: 根据语义可能是断点打在方法上面了,导致在某个 ...

  9. EF架构~mysql数据库无法创建数据模型

    回到目录 主要是通过vs2017+mysql.Data+Mysql.data.Entity+ef 来进行开始,当我们选择数据模型生成实体时,可以会出现以下问题:  http:// 解决办法: 1.安装 ...

  10. C#线程安全使用(四)

    这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationTokenSource,C ...