Echarts技巧--日历饼图

474 阅读3分钟

在数据可视化领域,图表是呈现和理解数据的重要方式。尤其是结合了时间维度的数据表示,能够提供更直观的时间序列分析。ECharts,作为一个功能丰富的数据可视化库,能够帮助用户以多种图表形式展示数据。本文将介绍如何使用ECharts绘制日历饼图,并提供详细的代码说明。

什么是日历饼图?

日历饼图是一种结合了日历图和饼图的混合图表。在这种图表中,标准的日历格被饼图所取代,而每个饼图代表了特定日期的数据分布,如工作、娱乐和睡眠时间的比例。用户可以一目了然地看到每一天的数据比重,并通过颜色和大小的差异来观察时间序列上的变化趋势。

绘制日历饼图的步骤

1. 准备数据

首先是数据的准备工作。在这个例子中,使用一个虚拟数据函数getVirtualData来生成随机数据模拟每一天的工作、娱乐和睡眠时间。

function getVirtualData() {
  const date = +echarts.time.parse('2017-02-01');
  const end = +echarts.time.parse('2017-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;
}

2. 配置日历组件

日历图的配置决定了日历的整体布局和样式,包括日历的大小、格式和位置等。

calendar: {
  top: 'middle',
  left: 'center',
  orient: 'vertical',
  cellSize: [80, 80],
  yearLabel: {
    show: false,
    fontSize: 30
  },
  dayLabel: {
    margin: 20,
    firstDay: 1,
    nameMap: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  },
  monthLabel: {
    show: false
  },
  range: ['2017-02']
}

3. 初始化饼图数据和配置

每个日历格中的饼图表示该日的活动分布。这里,根据scatterData中的数据创建一个饼图系列。

const pieSeries = scatterData.map(function (item, index) {
  return {
    type: 'pie',
    id: 'pie-' + index,
    center: item[0],
    radius: 30,
    coordinateSystem: 'calendar',
    label: {
      formatter: '{c}',
      position: 'inside'
    },
    data: [
      { name: 'Work', value: Math.round(Math.random() * 24) },
      { name: 'Entertainment', value: Math.round(Math.random() * 24) },
      { name: 'Sleep', value: Math.round(Math.random() * 24) }
    ]
  };
});

每一个pieSeries项代表一个饼图,其中的center属性对应着日历中的日期格,radius属性定义了饼图的半径大小。

4. 组织ECharts配置项

将前面准备好的日历配置和饼图配置组合到ECharts的配置项option中。

option = {
  tooltip: {},
  legend: {
    data: ['Work', 'Entertainment', 'Sleep'],
    bottom: 20
  },
  calendar: {...},
  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
  ]
};

5. 实例化ECharts并应用配置

最后一步是将配置应用到ECharts实例上,并渲染图表。

var myChart = echarts.init(document.getElementById('main'));
myChart.setOption(option);

当以上代码运行后,页面会展示一个日历饼图,用户可以看到每一天的时间分布情况。

总结

通过ECharts的强大功能,开发者可以很容易地构建复杂且信息丰富的图表。日历饼图只是其中的一种类型,它结合了时间的连续性和数据的分类表示,为数据分析提供了新的视角。正确配置ECharts的日历组件和饼图系列,可以创造出既美观又实用的数据可视化图表。以上示例代码展现了一个基本的日历饼图绘制方法,希望对读者在使用ECharts进行数据可视化时有所帮助。