物联网数据可视化,CPU,电量动态图表

这把我C 2021-01-07 16:07:41 8127

在物联网项目中经常要使用各种图表来显示设备的运行状况,比如一个设备的电量,是否在线,CPU使用情况,内存使用。
要优雅而美观地展示这些数据我们就要用到各种图表,这次我就给大家带来一个使用echart来制作CPU与电力图
将数据可视化制作成大屏显示是目前非常流行的手段。
这次我就给大家开发一个使用图表,先来看一下最终的效果

容器排版

由于上面是一个大的,下面是两个小的
所以布局是这样的

<style type="text/css">
  .container {
    width: 1000px;
    height: 100%;
    margin: 50px auto 0;
    border: 1px solid #ddd;
    display: flex;
    flex-wrap: wrap;
  }

  .chart-item {
    width: 100%;
    height: 300px;
  }

  #chart2,
  #chart3 {
    width: 50%;
  }
</style>
<div class="container">
  <div class="chart-item" id="chart1"></div>
  <div class="chart-item" id="chart2"></div>
  <div class="chart-item" id="chart3"></div>
</div>
CPU仪表盘图表制作

CPU的仪表是很简单的,首先调用echart.init() 进行初始化图表

var myChart = echarts.init(document.getElementById('chart1'));

然后声明一个options,这个变量承载的就是图表所有的配置参数,包括标题,颜色,数据

const option = {
  tooltip: {
    formatter: '{a} <br/>{b} : {c}%'
  },
  toolbox: {
    feature: {
      restore: {},
      saveAsImage: {}
    }
  },
  series: [
    {
      name: '监控指标',
      type: 'gauge',
      detail: { formatter: '{value}%' },
      data: [{ value: 50, name: 'CPU使用率' }]
    },
    {
      name: '监控指标1',
      type: 'gauge',
      detail: { formatter: '{value}%' },
      data: [{ value: 50, name: 'CPU使用率1' }]
    }
  ]
};

这里解释一下几个配置参数的含义
参数tooltip是用于定义辅助线如何展示的,就是你鼠标放到一个点上,出现的信息,就是下面这个信息

参数series是定义的一个图例的配置参数,一个画布里可能存在多个图例,内部有一个type属性,这个属性规定了该图例使用哪种
显示方式。type: 'gauge', 则规定使用仪表盘的样式来展示数据,一个不封口的圆,刻度是从0到100

此外在echart中还有很多图例的类型,以下是官方的截图


不同的类型,需要不同的配置参数。
参数detail用于在仪表盘上显示当前是多少值,可以直接使用data中的值,
参数toolbox是用于配置该图标能否还原,下载为png图片。

由于图表需要实时地显示CPU的使用率,所有需要定时调用后端接口刷新数据,或者使用websocket,这里我使用一种简单的方式js的定时器和随机数

setInterval(function () {
  option.series[0].data[0].value = (Math.random() * 100).toFixed(2) - 0;
  myChart.setOption(option, true);
}, 2000);

到此一个CPU的仪表盘就算完成了。
图表默认是在容器中垂直居中的,跟随容器大小而自适应。但如果你的容器太小,那就有可能需要调整一些字体大小。

内存,磁盘折线图

仪表盘与折线图,最大的区别是,在series中需要配置 type: 'line'
这样配置一些线型图的属性才能生效。
来看一下折线图的options配置

const option = {
  title: {
    text: '内存使用量'
  },
  tooltip: {
    trigger: 'axis',
    formatter: function (params) {
      params = params[0];
      var date = new Date(params.name);
      return date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ' : ' + params.value[1];
    },
    axisPointer: {
      animation: false
    }
  },
  xAxis: {
    type: 'time',
    splitLine: {
      show: false
    }
  },
  yAxis: {
    type: 'value',
    boundaryGap: [0, '100%'],
    splitLine: {
      show: false
    }
  },
  series: [{
    name: '模拟数据',
    type: 'line',
    showSymbol: false,
    hoverAnimation: false,
    data: data
  }]
};

其中有这些参数配置项

  • title 为该图例增加一个标题,可以自定义位置,用于辅助说明该图的信息
  • tooltip 辅助线,鼠标悬浮图例时,会显示最近点的信息,数值可以进行格式化
  • xAxis 配置x轴,有个很重要的参数就是type, 这个类型直接决定了图表x轴的刻度,是否是连续,

type有四种选项,value, category, time, log
以下是各个值的解释。

'value' 数值轴,适用于连续数据。

'category' 类目轴,适用于离散的类目数据。为该类型时类目数据可自动从 series.data 或 dataset.source 中取,或者可通过 xAxis.data 设置类目数据。

'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。

'log' 对数轴。适用于对数数据。

  • yAxis 配置y轴 与x轴一样 也有四个值 value,category,time,log

'value' 数值轴,适用于连续数据。

'category' 类目轴,适用于离散的类目数据。为该类型时类目数据可自动从 series.data 或 dataset.source 中取,或者可通过 yAxis.data 设置类目数据。

'time' 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。

'log' 对数轴。适用于对数数据。

  • series 定义图例的配置数据,线条,颜色,面积,数据,动画

最后的效果图

总结

总的来说用的echart做物联网Dashboard是非常简单的,基本步骤就是

  • 调用echarts.init()初始化一个图标
  • 声明图表的配置参数option
  • 最后将配置参数设置图表,myChart.setOption(option);
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 99 9 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
这把我C
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区