1.概述
效果图
折线图+柱状图
1.1 运行环境
VS Code,无需其余插件
1.2 数据样式
csv文件数据样式:每一列代表一种数据,这里有三种数据。其中第一列用折线图表示,第二列用柱状图表示。
2. flask模块
读取csv文件之后,处理里面的数据,再将数据传入HTML里面,让echarts使用这个数据来画图。
from flask import Flask,render_template,request,url_for
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
import re
import requests #替代浏览器进行网络请求
import numpy as np
import pandas as pd
#创建应用程序:web应用程序
app=Flask(__name__)
@app.route("/")
def main():
#将文件名存储在filename中
filename='data.csv'
# 要读取的csv文件
data=pd.read_csv(filename)
# 处理csv文件的数据
xaxis=[i for i in range(0,20)] # 横坐标
all=data['all'].values.tolist() # 展示数量1
now=data['now'].values.tolist() # 展示数量2
dup=data['dup'].values.tolist() # 展示数量3
# 把数据传入HTML文件里面
return render_template("test.html",xaxis=xaxis,data_all=all,data_now=now,data_dup=dup)
if __name__=='__main__':
app.run(debug=True) #启动应用程序->启动一个flask项目
3. HTML模块
3.1 head部分
在head
部分引入echarts头文件。使用方法参考这篇文章
<head>
<meta charset="utf-8" />
<title>ECharts</title>
<!-- 引入刚刚下载的 ECharts 文件 -->
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.min.js"></script>
</head>
3.2 body部分
在body
里面更改数据。
在flask模块可以看到,我们已经传入了xaxis,data_all,data_now,data_dup 四个数据。第一个是横坐标要用的数据,剩下的是用于纵坐标的数据。
在option
里面更改数据的横纵坐标名称,数据引用格式为{{ 数据1 |safe}}
其他细节更改:
完整代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>ECharts</title>
<!-- 引入刚刚下载的 ECharts 文件 -->
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.min.js"></script>
</head>
<body>
<!-- 为 ECharts 准备一个定义了宽高的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
var option;
// 配置
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
toolbox: {
feature: {
dataView: { show: true, readOnly: false },
magicType: { show: true, type: ['line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
legend: {
data: ['now', 'all', 'dup']
},
xAxis: [
{
type: 'category',
data: {{xaxis|safe}},
axisPointer: {
type: 'shadow'
}
}
],
yAxis: [
{
type: 'value',
name: 'all',
min: 0,
max: 100,
interval: 10,
axisLabel: {
formatter: '{value} 个'
}
},
{
type: 'value',
name: 'dup',
min: 0,
max: 0.15,
interval: 0.05,
axisLabel: {
formatter: '{value} %'
}
}
],
series: [
{
name: 'now',
type: 'bar',
data: {{data_now|safe}}
},
{
name: 'all',
type: 'bar',
data: {{data_all|safe}}
},
{
name: 'dup',
type: 'line',
yAxisIndex: 1,
data: {{data_dup|safe}}
}
]
};
option && myChart.setOption(option);
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
</body>
</html>
完结