Echarts 如何设置x轴为时间轴,y轴为该时间段内的相关数据?

效果图

1.echarts官网新增一个普通的示例,放在vue组件中


  xAxis: {
    type: 'category',
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      data: [150, 230, 224, 218, 135, 147, 260],
      type: 'line'
    }
  ]

2.将X轴的type改为:'time',Y轴不变。

xAxis: {
     type: 'time',
     min: startTime,
     max: endTime,
}


3.并且根据项目需要可以设置开始时间,和结束时间。我这边开始时间为当天的0点,结束时间为当前时间的整点。

 

var date = new Date()
const startTime = new Date().setHours(0, 0, 0)
const endTime = date.setHours(date.getHours(), 0, 0, 0);

4.如果X轴时间格式不对,需要处理成自己想要的格式,我这边需要的时+分,处理方式可以参考如下:

 // 时间戳转字符串YYYY/MM/DD HH:mm:ss
      function backTime(value) {
        let date = new Date(value);
        // 获取年份、月份和日期  
        let year = date.getFullYear();
        let month = date.getMonth() + 1; // 月份从 0 开始,需要加 1  
        let day = date.getDate();

        let hours = date.getHours();
        let minutes = date.getMinutes();
        let seconds = date.getSeconds();

        // 格式化月份和日期为两位数(不足两位时补零)  
        month = month < 10 ? '0' + month : month;
        day = day < 10 ? '0' + day : day;
        hours = hours < 10 ? '0' + hours : hours;
        minutes = minutes < 10 ? '0' + minutes : minutes;
        seconds = seconds < 10 ? '0' + seconds : seconds;

        // 返回格式化后的字符串  
        return hours + ':' + minutes;
      }

5.最重要的是处理series,将后端返回的data数据处理为以下格式(第一个代表时间,第二个代表当前时间的值):

var data = [
      ['2024-7-18 8:00:00', 1],
      ['2024-7-18 8:10:00', 3],
      ['2024-7-18 8:20:00', 5],
   ]

6.现在的全部基础代码为(其他样式可以自己更改):

xAxis: {
    type: 'time',
    min: startTime,
    max: endTime,
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: "下行",
      data: data,
      type: 'line'
    }
  ]

如果需要2条线,就在series里面新增加一个对象,里面的data处理成相应的格式,并且增加

 legend: {

         data: ['上行', '下行']

   },

如果x轴的type为”time“时间轴没办法用interval设置间隔一小时:interval: 3600 * 1000,可以用 splitNumber设置间隔。当然如果type为'category'类目轴,interval亲测有效!

要设计一个医疗波形图的demo,需要以下步骤: 1. 确定波形图的数据类型和范围 2. 设计波形图的布局和样式 3. 利用emwin绘制波形图 以下是一个简单的demo代码: ```c #include "GUI.h" #include "DIALOG.h" #define X_SIZE 400 #define Y_SIZE 240 typedef struct { int x; //数据的时间 int y; //数据的值 } DataPoint; DataPoint data[] = {{0, 50}, {1, 60}, {2, 70}, {3, 80}, {4, 90}, {5, 100}, {6, 90}, {7, 80}, {8, 70}, {9, 60}}; void DrawGraph(WM_HWIN hWin) { GRAPH_DATA_Handle hData; hData = GRAPH_DATA_YT_Create(GUI_GREEN, X_SIZE, NULL, sizeof(DataPoint)); GRAPH_DATA_YT_AddValues(hData, data, sizeof(data)/sizeof(DataPoint)); GRAPH_SCALE_Handle hScaleX, hScaleY; hScaleX = GRAPH_SCALE_Create(30, GUI_TA_LEFT, GRAPH_SCALE_CF_HORIZONTAL, 10); GRAPH_SCALE_SetFactor(hScaleX, 1); GRAPH_SCALE_SetTickDist(hScaleX, 25); GRAPH_SCALE_SetTextColor(hScaleX, GUI_GREEN); GRAPH_AttachScale(hWin, hScaleX); hScaleY = GRAPH_SCALE_Create(30, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 10); GRAPH_SCALE_SetFactor(hScaleY, 1); GRAPH_SCALE_SetTickDist(hScaleY, 25); GRAPH_SCALE_SetTextColor(hScaleY, GUI_GREEN); GRAPH_AttachScale(hWin, hScaleY); GRAPH_SetGridDistX(hWin, 25); GRAPH_SetGridDistY(hWin, 25); GRAPH_SetGridVis(hWin, 1); GRAPH_SetBorder(hWin, 40, 10, 10, 10); GRAPH_SetColor(hWin, GUI_GREEN, GRAPH_CI_GRID); GRAPH_SetColor(hWin, GUI_GREEN, GRAPH_CI_FRAME); GRAPH_SetColor(hWin, GUI_GREEN, GRAPH_CI_BK); GRAPH_SetLineStyleH(hWin, GUI_LS_DOT); } void MainTask(void) { GUI_Init(); WM_HWIN hWin = GRAPH_CreateEx(0, 0, X_SIZE+60, Y_SIZE+40, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_GRAPH0); DrawGraph(hWin); while(1) { GUI_Delay(100); } } ``` 这段代码使用了emwin的 `GRAPH` 组件来绘制波形图,使用了 `GRAPH_DATA_YT_Create` 函数创建了一个数据系列,使用了 `GRAPH_DATA_YT_AddValues` 函数向数据系列中添加数据。同时使用 `GRAPH_SCALE_Create` 函数创建了两个刻度,分别用于xy轴设置了刻度方向、刻度间隔等属性,最后使用了 `GRAPH_AttachScale` 函数将刻度附加到波形图上。通过 `GRAPH_SetGridDistX` 和 `GRAPH_SetGridDistY` 函数设置网格线间距,通过 `GRAPH_SetBorder` 函数设置波形图边框大小,通过 `GRAPH_SetColor` 函数设置波形图颜色。最后在主任务中创建了一个窗口,并在该窗口中绘制了波形图。 这个demo可以根据实际需求进行修改和扩展,例如可以添加多个数据系列、修改刻度范围等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值