在数据可视化领域,图表的形式多样,适用于不同数据场景的展示。Echarts作为一款被广泛应用的图表库,其中的日历关系图便是其提供的一种创新的可视化形式。日历关系图结合了日历的直观显示和关系图的联系展示,适合展示数据在时间维度的分布及其关联情况。
日历关系图的特点
日历关系图以日历的形式为基础,将每天的数据通过色块或者大小不同的符号来表示,同时通过关系图的连线或其他符号展现数据点之间的连接关系。该图表类型尤为适合展现时间序列数据,或者在特定时间内的数据流动和传播情况。
Echarts中日历关系图的实现方法
为了丰富图表的表现力,Echarts中的日历关系图融合了传统的日历热力图和图关系图的特点。下文将详细介绍Echarts如何创建这一图表,并展示绘制日历关系图的详细代码。
基础数据准备
在绘制日历关系图之前,首先需要准备展示的数据。示例中的数据用于展示2017年2月到3月间的几个时间点及其数值:
const graphData = [
['2017-02-01', 260],
['2017-02-04', 200],
['2017-02-09', 279],
['2017-02-13', 847],
['2017-02-18', 241],
['2017-02-23', 411],
['2017-03-14', 985]
];
关系图连线构造
为了在日历格子之间构建关系图,需要确定节点间的连线情况:
const links = graphData.map(function (item, idx) {
return {
source: idx,
target: idx + 1
};
});
links.pop();
通过上述代码对每一对相邻的数据点创建了连线,构造了一系列的关系链。
虚拟数据生成
为了完善日历视图,通常需要展示一个完整月份的数据。下面的函数生成了2017年全年的日历数据,模拟了随机的数据值:
function getVirtualData(year) {
const date = +echarts.time.parse(year + '-01-01');
const end = +echarts.time.parse(+year + 1 + '-01-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() * 1000)
]);
}
return data;
}
图表配置与布局
接下来要完成日历关系图的主要配置部分:
option = {
tooltip: {}, // 工具提示配置
calendar: {
top: 'middle', // 日历位置
left: 'center', // 日历位置
orient: 'vertical', // 日历方向,竖直布局
cellSize: 40, // 单元格大小
yearLabel: {
margin: 50,
fontSize: 30 // 年份标签字体大小
},
dayLabel: {
firstDay: 1,
nameMap: 'cn' // 中文星期标签
},
monthLabel: {
nameMap: 'cn', // 中文月份标签
margin: 15,
fontSize: 20,
color: '#999' // 月份标签字体颜色
},
range: ['2017-02', '2017-03-31'] // 日期范围
},
visualMap: {
min: 0,
max: 1000,
type: 'piecewise', // 分段型视觉映射组件
left: 'center', // 位置
bottom: 20, // 位置
inRange: {
color: ['#5291FF', '#C7DBFF'] // 数据映射的颜色范围
},
seriesIndex: [1], // 关联的系列序号
orient: 'horizontal'// 布局方向
},
series: [ // 系列列表
{
type: 'graph', // 类型为关系图
edgeSymbol: ['none', 'arrow'], // 边的箭头符号
coordinateSystem: 'calendar', // 使用日历坐标系
links: links, // 关系图的边数据
symbolSize: 15, // 关系图的节点大小
calendarIndex: 0, // 日历索引
itemStyle: {
color: 'yellow', // 节点颜色
shadowBlur: 9, // 阴影的大小
shadowOffsetX: 1.5,
shadowOffsetY: 3,
shadowColor: '#555' // 阴影颜色
},
lineStyle: {
color: '#D10E00', // 联线颜色
width: 1, // 联线宽度
opacity: 1 // 联线透明度
},
data: graphData, // 关系图的节点数据
z: 20 // 层叠顺序
},
{
type: 'heatmap', // 类型为热力图
coordinateSystem: 'calendar', // 使用日历坐标系
data: getVirtualData('2017') // 数据来源
}
]
};
在配置项中,calendar定义了日历的布局,visualMap将值映射到颜色上,而series数组中包含了两个系列——一个是表示关系图的graph,另一个是表示热力图的heatmap。其中关系图用于体现数据之间的连带关系,而热力图则用于展示时间序列数据的值。
关系图的每个节点代表一个日期及其数据值,节点的大小和颜色可以代表数据的大小。例子中使用黄色作为节点颜色,并为每条连接线添加了红色和箭头,以突出显示数据间的流向。
热力图则以渐变的色块表示每日的数据,颜色深浅根据数据的大小变换。
实际应用场景
在实际应用中,日历关系图适用于展示时间序列关联数据,如社交网络中信息的传递路径、商品销售随时间的变化、记念日或大事件的关联性分析等。与传统的柱状图或折线图相比,日历关系图更直觉地反映出数据在时间维度上的分布,同时也增强了数据之间关联性的可视化。
使用Echarts创建日历关系图,还可以结合Echarts丰富的交云功能,实现点击节点展示详情、筛选特定时间段内的数据变化等互动操作,大大增强了用户体验。
结语
日历关系图以其独特的展示方式和合理的信息布局,在时间序列数据的可视化展现中担当了重要角色。通过上述示例的代码解析和配置方法,相信读者已对于如何利用Echarts创建这一类型的图表有了深入的理解。随着数据分析和可视化需求的不断提高,类似日历关系图这样直接、形象的数据展现方式必将在未来担当更为重要的角色。