探索温度计的数字化设计:一个可视化温度数据的Web图表案例

随着科技的发展,数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面,传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表,该图表通过动态数据可视化展示了温度值,并通过渐变色和刻度设计增加了温度计的真实感。

项目需求

在我们的项目中,我们需要创建一个温度计图表,它可以实时展示温度值,并具有渐变色的温度刻度。此外,我们还希望温度计的显示内容能够根据温度值的变化而变化,例如当温度偏高时显示特定的文本。

技术选型

为了实现这个项目,我们选择了 ECharts 作为我们的图表库。ECharts 提供了多种图表类型,包括条形图、折线图、饼图等,并且可以轻松地自定义图表样式和交互功能。此外,ECharts 支持响应式设计,能够适应不同大小的屏幕。

实现过程
  1. 初始化 ECharts 实例:我们首先需要在 HTML 页面中引入 ECharts 库,并创建一个图表容器。然后,我们可以通过 JavaScript 初始化 ECharts 实例,并设置图表的基本配置。

  2. 配置图表系列:我们创建了多个系列,包括温度计的显示内容、温度刻度、温度计柱等。每个系列都有其独特的配置,如类型、数据、样式等。

  3. 温度值和显示内容的处理:我们定义了温度值 TP_value 和显示内容 TP_txt,并根据温度值的不同范围,设置了不同的显示内容和渐变色。

  4. 温度刻度的处理:我们使用了一个循环来构造温度刻度,并根据温度值的不同范围,设置了不同的刻度值。

  5. 温度计柱的处理:我们设置了温度计柱的渐变色和样式,并根据温度值的不同范围,设置了不同的显示内容和样式。

  6. 显示内容和定位的处理:我们设置了显示内容和定位,并根据温度值的不同范围,设置了不同的显示内容和定位。

  7. 避免温度过低 右侧指示内容出界:我们设置了温度计柱的宽度,并根据温度值的不同范围,设置了不同的宽度。

实现代码

通过以上步骤,我们成功地创建了一个温度计的数字化呈现。该图表可以实时展示温度值,并具有渐变色的温度刻度。代码如下:

var TP_value = 10;  // 温度
var kd = [];        // 刻度
var Gradient = [];  // 存放颜色的数组
var leftColor = ''; // 显示文本的颜色
var showValue = ''; // 显示内容 温度数字
var boxPosition = [65, 0];  // 显示内容的定位
var TP_txt = '';    // 显示内容 文本

// 刻度使用柱状图模拟,短设置1,长的设置3;构造一个数据
for (var i = 0, len = 135; i <= len; i++) {
  if (i < 10 || i > 130) {
    kd.push('')
  } 
  else {
    if ((i - 10) % 20 === 0) {
      kd.push('-3');
    } 
    else if ((i - 10) % 4 === 0) {
      kd.push('-1');
    } 
    else {
      kd.push('');
    }
  }
}

//中间线的渐变色和文本内容
if (TP_value > 20) {
  TP_txt = '温度偏高';
  Gradient.push({
    offset: 0,
    color: '#93FE94'
  }, {
    offset: 0.5,
    color: '#E4D225'
  }, {
    offset: 1,
    color: '#E01F28'
  })
} 
else if (TP_value > -20) {
  TP_txt = '温度正常';
  Gradient.push({
    offset: 0,
    color: '#93FE94'
  }, {
    offset: 1,
    color: '#E4D225'
  })
} 
else {
  TP_txt = '温度偏低';
  Gradient.push({
    offset: 1,
    color: '#93FE94'
  })
}
if (TP_value > 62) {
  showValue = 62
} 
else {
  if (TP_value < -60) {
    showValue = -60
  } 
  else {
    showValue = TP_value
  }
}
// 避免温度过低 右侧指示内容出界
if (TP_value < -10) {
  boxPosition = [65, -120];
}

leftColor = Gradient[Gradient.length - 1].color;
// 因为柱状初始化为0,温度存在负值,所以加上负值60和空出距离10


option = {
  backgroundColor: '#0C2F6F',
  title: {
    text: '温度计',
    show: true,
    textStyle: {
      color: '#fff'
    }
  },
  yAxis: [
    {
      show: false,
      data: [],
      min: 0,
      max: 135,
      axisLine: {
        show: false
      }
    }, 
    {
      show: false,
      min: 0,
      max: 50,
    }, 
    {
      type: 'category',
      data: ['', '', '', '', '', '', '', '', '', '', '°C'],
      position: 'left',
      offset: -150,
      axisLabel: {
        fontSize: 18,
        color: 'white'
      },
      axisLine: {
        show: false
      },
      axisTick: {
        show: false
      },
    }
  ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值