Echarts — 可视化练习(热力图heatmap)


Echarts — 可视化练习(热力图heatmap)_flask

不要强迫自己什么事情都要做对,因为有时候,犯错能让我们变得更好。不要尝试去弄清每件事,因为有时候一些事情不是用来理解的,而是要懂得接受它们。因为你自卑,所以你自尊心强,所以你多疑敏感,所以你缺乏安全感,所以你控制欲强,所以你占有欲强,所以你的小心思很多,所以你的烦恼也不少。


Flask

import pandas as pd
from flask import Flask,render_template
from flask_sqlalchemy import SQLAlchemy
# 创建并实例化Flask对象
app = Flask(__name__)
class Config(object):
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/visiable'
SQLALCHEMY_TRACK_MODIFICATIONS = True
app.config.from_object(Config)
# 视图
@app.route('/')
def index():
return render_template("heatmap01.html")
# 运行
if __name__ == '__main__':
app.run(debug=True)

HTML

<!DOCTYPE html>
<html lang="en" style="height:">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body style="height:">
<div id="container" style="height:"></div>
<script src="../static/echarts%20(1).js" type="text/javascript"></script>
<script type="text/javascript">var dom = document.getElementById("container");
var myecharts = echarts.init(dom);
// 横坐标类目
var hours = [
'12a', '1a', '2a', '3a', '4a', '5a', '6a',
'7a', '8a', '9a', '10a', '11a',
'12p', '1p', '2p', '3p', '4p', '5p',
'6p', '7p', '8p', '9p', '10p', '11p'
];
// 纵坐标类目
var days = ['Saturday', 'Friday', 'Thursday',
'Wednesday', 'Tuesday', 'Monday', 'Sunday'];
// 热力图数据集
var data = [
[0, 0, 5], [0, 1, 1], [0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0], [0, 6, 0],
[0, 7, 0], [0, 8, 0], [0, 9, 0], [0, 10, 0], [0, 11, 2], [0, 12, 4], [0, 13, 1],
[0, 14, 1], [0, 15, 3], [0, 16, 4], [0, 17, 6], [0, 18, 4], [0, 19, 4], [0, 20, 3],
[0, 21, 3], [0, 22, 2], [0, 23, 5], [1, 0, 7], [1, 1, 0], [1, 2, 0], [1, 3, 0],
[1, 4, 0], [1, 5, 0], [1, 6, 0], [1, 7, 0], [1, 8, 0], [1, 9, 0], [1, 10, 5],
[1, 11, 2], [1, 12, 2], [1, 13, 6], [1, 14, 9], [1, 15, 11], [1, 16, 6], [1, 17, 7],
[1, 18, 8], [1, 19, 12], [1, 20, 5], [1, 21, 5], [1, 22, 7], [1, 23, 2], [2, 0, 1],
[2, 1, 1], [2, 2, 0], [2, 3, 0], [2, 4, 0], [2, 5, 0], [2, 6, 0], [2, 7, 0],
[2, 8, 0], [2, 9, 0], [2, 10, 3], [2, 11, 2], [2, 12, 1], [2, 13, 9], [2, 14, 8],
[2, 15, 10], [2, 16, 6], [2, 17, 5], [2, 18, 5], [2, 19, 5], [2, 20, 7], [2, 21, 4],
[2, 22, 2], [2, 23, 4], [3, 0, 7], [3, 1, 3], [3, 2, 0], [3, 3, 0], [3, 4, 0],
[3, 5, 0], [3, 6, 0], [3, 7, 0], [3, 8, 1], [3, 9, 0], [3, 10, 5], [3, 11, 4],
[3, 12, 7], [3, 13, 14], [3, 14, 13], [3, 15, 12], [3, 16, 9], [3, 17, 5], [3, 18, 5],
[3, 19, 10], [3, 20, 6], [3, 21, 4], [3, 22, 4], [3, 23, 1], [4, 0, 1], [4, 1, 3],
[4, 2, 0], [4, 3, 0], [4, 4, 0], [4, 5, 1], [4, 6, 0], [4, 7, 0], [4, 8, 0],
[4, 9, 2], [4, 10, 4], [4, 11, 4], [4, 12, 2], [4, 13, 4], [4, 14, 4], [4, 15, 14],
[4, 16, 12], [4, 17, 1], [4, 18, 8], [4, 19, 5], [4, 20, 3], [4, 21, 7], [4, 22, 3],
[4, 23, 0], [5, 0, 2], [5, 1, 1], [5, 2, 0], [5, 3, 3], [5, 4, 0], [5, 5, 0],
[5, 6, 0], [5, 7, 0], [5, 8, 2], [5, 9, 0], [5, 10, 4], [5, 11, 1], [5, 12, 5],
[5, 13, 10], [5, 14, 5], [5, 15, 7], [5, 16, 11], [5, 17, 6], [5, 18, 0], [5, 19, 5],
[5, 20, 3], [5, 21, 4], [5, 22, 2], [5, 23, 0], [6, 0, 1], [6, 1, 0], [6, 2, 0],
[6, 3, 0], [6, 4, 0], [6, 5, 0], [6, 6, 0], [6, 7, 0], [6, 8, 0], [6, 9, 0],
[6, 10, 1], [6, 11, 0], [6, 12, 2], [6, 13, 1], [6, 14, 3], [6, 15, 4], [6, 16, 0],
[6, 17, 0], [6, 18, 0], [6, 19, 0], [6, 20, 1], [6, 21, 2], [6, 22, 2], [6, 23, 6]
];
// 转换提取数据总集 --- 遍历
// || '-' 标记0
data = data.map(function (item) {
return [item[1], item[0], item[2] || '-'];
});

var option = null;
option = {
tooltip: {
position: 'top' // 指示显示在item的上方
},
grid: {
height: '50%',
top: '10%'
},
xAxis: {
type: 'category',
data: hours,
splitArea: { // 划分区域是否显示,类似于绘制的网格
show: true
}
},
yAxis: {
type: 'category',
data: days,
splitArea: {
show: true
}
},
visualMap: {
min: 0,
max: 10,
calculable: true,
orient: 'horizontal', // 热力分布标签布局
left: 'center',
bottom: '15%'
},
series: [
{
name: 'Punch Card',
type: 'heatmap',
data: data,
label: {
show: true // 每个item上的标签
},
emphasis: { // 设置阴影
itemStyle: {
shadowBlur: 10,
shadowColor: 'rgba(0,0,0,0.5)'
}
}
}
]
};
if (option&&typeof option=='object'){
myecharts.setOption(option);
}</script>
</body>
</html>

效果展示

heatmap样例展示


知识点小总结

Echarts — 可视化练习(热力图heatmap)_flask_02

  • 个人理解:热力图就是以类似地图的样式,将数据的分布情况进行展示,可以直观的看出数据分分布密集程度以及数据种类的差异。
  • 既然是以地图的形式,那理论上就有经纬度。在这里,使用 X、Y 轴代替,同样都是使用坐标的形式定位
  • 与其他图的不同处在于,横纵坐标均是类目,增加了splitArea属性进行区域划分
visualMap: {
min: 0,
max: 10,
calculable: true,
orient: 'horizontal', // 热力分布标签布局
left: 'center',
bottom: '15%'
},
  • 视觉映射组件中,定义组件允许的最大、最小值,calculable — 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。
data =  [[0, 0, 5], [0, 1, 1], [0, 2, 0]...]
// 转换提取数据总集 --- 遍历
// || '-' 标记0
// [0, 0, 5] =》 item
data = data.map(function (item) {
return [item[1], item[0], item[2] || '-'];
});
  • data在进行转换提取时将每个item中的数据前两个换了位置,以对应x、y轴。