极致呈现系列之:Echarts日历坐标系的时光流转

news2024/12/23 6:03:17

目录

  • 什么是日历坐标系
  • Echarts日历坐标系的特性
  • Echarts日历坐标系的应用场景
  • Echarts日历坐标系中常用的配置项
  • Vue3中使用Echats日历坐标系实现健康可视化图表
  • 日历饼图

什么是日历坐标系

日历坐标系是一种用于展示时间数据的坐标系,将数据按照日期呈现在一个日历形式的图表中。它可以帮助人们更直观地观察时间序列数据的变化趋势,并通过颜色、形状等视觉方式来表达数据的差异。

在日历坐标系中,横轴表示日期,纵轴通常表示其他数据维度,例如数量、指标等。每个日期对应坐标系中的一个小格子,可以使用不同的颜色、大小或其他视觉元素来表示具体的数据值。通过观察这些小格子的变化,我们可以直观地看到不同日期之间的数据变化情况。

日历坐标系的优势在于它以日历的形式展示时间数据,这种视觉表达方式对人们的时间感知非常直观,便于我们理解和记忆。同时,日历坐标系还可以用于展示周期性的数据,比如每周、每月或每年的数据。通过放大或缩小日历坐标系的时间尺度,我们可以更详细地观察数据的变化趋势。

在Echarts中,日历坐标系通常作为一种特殊的坐标系来支持,具有丰富的配置选项和交互功能。通过设置不同的参数和样式,我们可以对日历坐标系进行个性化的定制,使其更好地适应我们的数据展示需求。

Echarts日历坐标系的特性

  1. 时间序列展示:日历坐标系以日历形式展示时间序列数据,不仅直观可视化,还能保留时间的顺序关系,帮助用户观察时间数据的变化趋势。

  2. 周期性展示:日历坐标系支持以天、周、月、年等时间单位展示数据。通过调整时间尺度,可以观察数据的周期性变化,并发现周期性趋势和规律。

  3. 空间利用率高:日历坐标系采用紧凑的格子布局,最大限度地利用图表空间,使得更多的时间点能够在有限的空间中展示出来。

  4. 高度可定制化:日历坐标系可以根据需求进行个性化的定制。可以调整日历格子的颜色、形状、大小等样式,以及设置选中格子的高亮效果,通过视觉效果使数据更加突出。

  5. 多维度数据展示:除了时间维度,日历坐标系还可以展示其他维度的数据。可以通过不同的颜色、大小等视觉元素来表示不同维度的数据差异,以便更全面地理解数据。

Echarts日历坐标系的应用场景

  1. 经济和金融领域:日历坐标系常被用于展示经济指标数据的时间变化,比如股市指数、GDP增长率、消费者信心指数等。通过日历坐标系,可以直观地观察到不同时间段的数据变化,帮助分析师和投资者理解市场趋势和周期性。

  2. 天气预报:日历坐标系可以用于展示未来一段时间内的天气预报数据,比如气温、降水量、风速等。通过日历坐标系,用户可以快速查看每天的天气情况,并对天气变化进行预测和分析。

  3. 健康管理:日历坐标系可用于记录和展示人们的健康数据,比如体重、血压、心率等。用户可以在日历坐标系上标记和追踪自己的健康指标,观察数据的变化和趋势,以便调整自己的生活方式和健康管理计划。

  4. 社交媒体分析:日历坐标系可以用于展示社交媒体活动的时间分布,比如每天的发帖量、点赞量、评论量等。通过日历坐标系,用户可以快速了解社交媒体的活跃度和用户行为,以便制定营销策略和优化社交媒体运营。

  5. 项目管理:日历坐标系可以用于展示项目的进度和里程碑。通过标记关键日期和任务完成情况,团队成员可以直观地了解项目的进展,从而做出及时调整和决策。

  6. 时间序列数据分析:日历坐标系可以用于展示任何具有时间序列的数据,比如销售额、用户活跃度、网站访问量等。通过日历坐标系,可以快速识别出高峰期和低谷期,发现周期性趋势,帮助做出数据驱动的决策。

日历坐标系适用于几乎所有需要展示时间序列数据的场景。它能够有效地帮助人们理解和分析时间数据,发现趋势和规律,做出更好的决策。

Echarts日历坐标系中常用的配置项

Echarts中的日历坐标系(calendar)是一个组件,是一个单独的配置项calendar,calendar常用的配置项有如下几个:

  1. calendar.cellSize:设置日期单元格的大小,以像素为单位。
  2. calendar.range:设置日历范围,可以是指定的时间范围或特定的年份。
  3. calendar.splitLine:设置日期单元格之间的分割线样式,包括颜色、线宽等。
  4. calendar.itemStyle:设置日期单元格的样式,包括背景色、边框等。
  5. calendar.dayLabel:设置星期标签的样式,包括文字颜色、字体大小等。
  6. calendar.monthLabel:设置月份标签的样式,包括文字颜色、字体大小等。
  7. calendar.yearLabel:设置年份标签的样式,包括文字颜色、字体大小等。

Vue3中使用Echats日历坐标系实现健康可视化图表

  1. 创建vue项目,安装ECharts库
npm install echarts --save
  1. 新建CalendarView.vue文件,使用import语句引入ECharts库
import * as echarts from 'echarts'; 
  1. 创建图表容器:在CalendarView组件的template中,添加一个div元素作为图表的容器。给它一个唯一的ref属性,以便在后面初始化图表对象时使用
<template>
   <div ref="chart" style="width:600px;height:400px; margin: 20px auto;"></div>
</template>
  1. 初始化图表对象:在CalendarView组件中定义chart,
const chart = ref(null)

mounted生命周期钩子函数中,使用echarts.init方法初始化图表对象。

<script setup>
import { ref, onMounted } from 'vue'
import * as echarts from 'echarts'
const chart = ref(null)
onMounted(() => {
  const myChart = echarts.init(chart.value) 
})
</script>

5.准备数据,实际项目开发中,这里的数据应该是从后台的API接口获取的,这里通过调用 generateData 方法生成模拟的数据。

const data = generateData();
function generateData() {
  const startDate = new Date('2021-01-01');
  const endDate = new Date('2021-12-31');
  const generatedData = [];

  for (let date = startDate; date <= endDate; date.setDate(date.getDate() + 1)) {
    const dateString = formatDate(date);
    const value = Math.floor(Math.random() * 101);
    generatedData.push({ name: dateString, value });
  }

  return generatedData;
}

function formatDate(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}
  1. 配置图表参数,在CalendarView组件的mounted生命周期钩子函数中,定义option对象,在里面配置图表数据,并使用chart.setOption方法配置图表的参数。
onMounted(() => {
  const myChart = echarts.init(chart.value)
     tooltip: {
      position: 'top',
    },
    visualMap: {
      min: 0,
      max: 100,
      type: 'piecewise',
      orient: 'horizontal',
      left: 'center',
      top: 10,
    },
    calendar: {
      range: '2021',
      cellSize: ['auto', 50],
      dayLabel: {
        firstDay: 1,
        nameMap: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
      },
      monthLabel: {
        show: true,
      },
      yearLabel: {
        formatter: '{start} 年',
      },
    },
    series: [
      {
        type: 'heatmap',
        coordinateSystem: 'calendar',
        data: data.map(item => [item.name, item.value]),
      },
    ],
  }
  myChart.setOption(option)
})

配置完成后,运行程序,刷新浏览器,看下效果
在这里插入图片描述
上述代码中

  • tooltip:配置提示框的位置,这里设置为显示在顶部。
  • visualMap:配置视觉映射,将数值映射为不同的颜色。minmax 分别指定数据的最小值和最大值,type 设置为 ‘piecewise’ 表示分段类型的视觉映射。orient 表示视觉映射的方向,这里设置为水平,left: 'center'top: 10 表示视觉映射的位置。
  • calendar:配置日历坐标系的相关参数,range 表示可选日期范围为全年的数据,cellSize 表示每个日期格子的大小,这里将高度设置为 50px。dayLabel 配置每周的起始日期和周一至周日的显示名称,monthLabel 设置为显示月份,yearLabel 设置为以 “{start} 年” 的格式显示年份。
  • series:配置采用热力图(heatmap)类型的数据系列。type 设置为 ‘heatmap’ 表示采用热力图,coordinateSystem 设置为 ‘calendar’ 表示使用日历坐标系。data 是一个数组,其中每个元素是一个包含日期和数值的数组。通过 data.map(item => [item.name, item.value]) 将原始的日期和数值数据转换成热力图需要的格式。

日历饼图

日历坐标系和其它图表结合能做出很有意思的图表,这里通过日历坐标系+饼图观察个人生活质量统计的图表,核心代码如下:


const cellSize = [80, 80];
const pieRadius = 30;
function getVirtualData() {
  const date = +echarts.time.parse('2023-02-01');
  const end = +echarts.time.parse('2023-03-01');
  const dayTime = 3600 * 24 * 1000;
  const data = [];
  for (let time = date; time < end; time += dayTime) {
    data.push([
      echarts.time.format(time, '{yyyy}-{MM}-{dd}', false),
      Math.floor(Math.random() * 10000)
    ]);
  }
  return data;
}
const scatterData = getVirtualData();
const pieSeries = scatterData.map(function (item, index) {
  return {
    type: 'pie',
    id: 'pie-' + index,
    center: item[0],
    radius: pieRadius,
    coordinateSystem: 'calendar',
    label: {
      formatter: '{c}',
      position: 'inside'
    },
    data: [
      { name: '工作', value: Math.round(Math.random() * 24) },
      { name: '娱乐', value: Math.round(Math.random() * 24) },
      { name: '睡眠', value: Math.round(Math.random() * 24) }
    ]
  };
});


onMounted(() => {
  const myChart = echarts.init(chart.value)

  const option = {
    tooltip: {},
    legend: {
      data: ['工作', '娱乐', '睡眠'],
      bottom: 20
    },
    calendar: {
      top: 'middle',
      left: 'center',
      orient: 'vertical',
      cellSize: cellSize,
      yearLabel: {
        show: false,
        fontSize: 30
      },
      dayLabel: {
        margin: 20,
        firstDay: 1,
        nameMap: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
      },
      monthLabel: {
        show: false
      },
      range: ['2023-02']
    },
    series: [
      {
        id: 'label',
        type: 'scatter',
        coordinateSystem: 'calendar',
        symbolSize: 0,
        label: {
          show: true,
          formatter: function (params) {
            return echarts.time.format(params.value[0], '{dd}', false);
          },
          offset: [-cellSize[0] / 2 + 10, -cellSize[1] / 2 + 10],
          fontSize: 14
        },
        data: scatterData
      },
      ...pieSeries
    ]
  }
  myChart.setOption(option)
})
 

刷新浏览器,看下效果
在这里插入图片描述
好了,关于Echarts日历坐标系的相关内容就介绍到这里,有问题的小伙伴可以在评论区留言,喜欢的小伙伴点赞关注加收藏哦!你也可以通过微信公众号搜索“九仞山”关注我,获取更多内容!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「Java核心技术大会 2023」6月重磅启动,邀你共同探讨Java生态 ~文末福利

Java核心技术大会 2023 大会简介直播预约&#xff1a;视频号“IT阅读排行榜”PART 1 特邀启动专场PART 2 Java语言、平台和趋势专场PART 3 Java应用开发专场PART 4 Java应用与系统架构专场PART 5 Java应用性能优化专场PART 6 大数据与数据库专场PART 7 云原生与Serverless专场P…

STM32学习 6月27日

51单片机中有时钟和时钟树的概念&#xff0c;外设只有GPIO、定时器、和一个串口&#xff0c;使用的都是11.0592MHZ的频率&#xff0c;除了定时器外&#xff0c;其他外设只要上电就可以使用。 stm32每个外设都有对应控制的开关&#xff0c;其所使用的频率各不相同&#xff0c;需…

[Windows] ImageGlass Kobe v8.9便携版

这款ImageGlass Kobe 神仙看图软件&#xff0c;UI漂亮&#xff0c;而且官方收费95元限时免费&#xff0c;打开大图速度极快&#xff0c;界面简洁纯净无广告&#xff0c;简直就是我的梦中情软&#xff0c;看图体验真的嘎嘎好&#xff01;是优秀的 Windows 照片查看器替代品。 具…

数据库监控与调优【十一】—— 索引调优技巧

索引调优技巧 长字段的索引调优使用组合索引的技巧覆盖索引排序优化冗余、重复索引的优化 长字段的索引调优 举例 实际项目中&#xff0c;我们可能需要给很长的字段添加索引。 比如以下first_name字段里面存储的数据普遍在200以上。 SELECT* FROMemployees WHEREfirst_…

Qt 动态手势识别“握拳”

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…

永磁同步电机无位置传感器控制,采用的是龙贝格,基于模型的 定点开发,仿真效果和实际95%高度吻合

永磁同步电机无位置传感器控制&#xff0c;采用的是龙贝格&#xff0c;基于模型的 定点开发&#xff0c;仿真效果和实际95%高度吻合&#xff0c;可以仿真学习&#xff0c;也可以直接移植到项目中 YID:32768642079012761

深度学习框架背景

深度学习框架背景 本文目录&#xff1a; 一、深度学习框架概念 二、为何要用深度学习框架 三、掌握深度学习框架要做哪些准备 四、深度学习主要应用场景 五、常见深度学习框架的对比 六、深度学习框架在市场上的占比 七、中国深度学习开源框架状况 八、备注 一、深度学…

redis------Hash操作(字典)

Hash操作&#xff0c;redis中Hash在内存中的存储格式如下图&#xff1a; # hash类型就是咱们python中的字典&#xff0c;key-value,字典又叫hash类型 字典的key必须可hash -字典类型在底层存储&#xff0c;基于数组存的 key---{key:value,key:value} hset(name, key, val…

【Vue】CI持续集成Vue前端项目--20230627

我的实践&#xff08;CI&#xff09; 1.打包 npm run build&#xff0c;产生dist文件 2.将dist文件的内容拷贝到static下面。不用在nginx文件夹中 3.编写nginx配置 default.conf server {listen 80;listen [::]:80;server_name localhost;location / {root /usr/…

【MySQL数据库】MHA高可用配置及故障切换

目录 一、MHA简介1.1什么是MHA1.2MHA的组成1.3MHA的特点 二、搭建MHA2.1故障模拟2.2故障修复 一、MHA简介 1.1什么是MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。MHA 的出现就是解决MySQL 单点的问题。M…

掌握构造函数:打破面向对象编程难题

文章目录 I. 介绍解释构造函数的概念及其作用为什么构造函数是面向对象编程中至关重要的一部分 II. 创建构造函数介绍如何定义并创建一个构造函数着重介绍构造函数的语法和使用方法定义一个构造函数创建一个对象实例使用对象实例继承和原型 III. 构造函数的参数介绍构造函数的参…

模拟测试 青少年软件编程(Python)等级考试试卷(一级) 试题解析

【单选题】&#xff08;每题2分&#xff09; 1、与a>b and b>c等价的是&#xff1f;&#xff08; &#xff09; A、a>b or b>c B、a>b>c C、a>b or not b D、not a 正确答案&#xff1a;B 试题解析&#xff1a;a>b并且b>c&#xff0c;那么a…

施工作业票管理

施工作业票管理是建筑行业中的一项重要管理&#xff0c;它是指在进行安全施工前&#xff0c;必须依据工程特点及安全要求&#xff0c;制定符合施工现场实际情况的施工作业方案&#xff0c;并按照程序进行作业申请及作业批准的程序书。比如说吊装作业票&#xff0c;高空作业票&a…

控制请求来源的HTML Meta标签 - Referrer详解

83. 控制请求来源的HTML Meta标签 - Referrer详解 在Web开发中&#xff0c;为了保护用户的隐私和安全&#xff0c;控制请求的来源信息是至关重要的。HTML中的<meta>标签提供了一种简单而有效的方式来控制请求的来源&#xff0c;其中包括Referrer&#xff08;引荐者&…

NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用

NVIDIA Jetson TX1&#xff0c;TX2&#xff0c;TX2 NX&#xff0c;AGX Xavier 和 Nano开发板GPIO口配置及应用 简介 ​ Jetson TX1、TX2、TX2 NX、AGX Xavier和Nano开发板都配备了一个包含40个引脚的GPIO接头&#xff0c;这些引脚可以用于数字输入输出。如下图 ​ 类似于Rasp…

cesium系列:根据中心点绘制圆和返回离某点最近的一个点的方法

1.背景 有需求写一个方法cesium 提供一个代码方法接收参数为function aaa(point1,point2,radius,num)其中点1和点2是经度纬度高度对象&#xff0c; 以point2为圆心&#xff0c;radius为半径生成一个圆弧&#xff0c;并创建一个数组在圆弧上均匀生成 num个点,点需要包含经纬高,…

2023年江西省研究生数学建模竞赛题目三解题思路

为了竞赛公平性&#xff0c;本人只提供思路&#xff0c;不提供具体的解决方法&#xff0c;欢迎交流讨论。给你们分享省赛特等奖的解题思路&#xff0c;哈哈哈&#xff0c;欢迎评论区讨论。这里给出第三题的解题思路。第二题的思路在这里&#xff1a;2023年江西省研究生数学建模…

打造加速组织变革的PMO—新药研发PMO实践分享︱先声药业研发PMO负责人

先声药业研发PMO负责人谢少斐先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;打造加速组织变革的PMO—新药研发PMO实践分享。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 2023年生物医药…

力扣 110. 平衡二叉树

题目来源&#xff1a;https://leetcode.cn/problems/balanced-binary-tree/description/ C题解1&#xff1a;递归法&#xff0c;后续遍历&#xff0c;从叶子节点开始&#xff0c;判断左右子树的深度差是否大于1。 /*** Definition for a binary tree node.* struct TreeNode {…

搭建OpenGL开发环境

资料 安装教程 软件下载 Visual Studio 2019CMakeGLFWGLAD glfw 3.3.8 下载glfw的目的&#xff1a; 获取压缩包里的include生成glfw3.lib 获取include 解压找到Include&#xff0c;include包含GLFW文件夹 生成glfw3.lib 使用CMake生成GLFW的工程文件在生成的目录中找…