flask+echarts (动态导入csv文件的数据)

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>

完结

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值