关于flask入门教程-ajax+echarts实现河流图

2022-03-11 17:17:23 浏览数 (2)

在ECharts系列中,使用series[i]-themeRiver设置主题河流图,主题河流图是一种特殊的流图,它主要用来表示事件或主题等在一段时间内的变化。

本例是通过各省从1950-2010年的GDP数据,反映我国国民经济的发展。

数据来源之网上,部分数据缺失。

flask后台的数据组装过程,其实就是折线图的翻版

代码语言:javascript复制
@app.route('/getjson7', methods=['GET'])
def getjson7():
    # 千万不要先将内部的对象序列化成字符串,然后再序列化外边的对象。
    # 再复杂的结构都可以表示为一个dict,
    # 而之前不需要做任何序列化操作!!!
    # 经过多轮测试,提前序列化会导致很多解析问题!!!
    sql = "select year,GDP,region from economyinfo"
    result= db.session.execute(sql).fetchall()

    resultlist=[list(x) for x in result]
    # [['1999', 3414.19, '福建省'],
    # ['1999', 1853.65, '江西省']]
    region = db.session.execute('select distinct region from economyinfo').fetchall()
    regionlist = [x['region'] for x in region]
    # ['北京市', '天津市', '河北省', '山西省', '内蒙古自治区',
    # '辽宁省', '吉林省', '黑龙江省', '上海市', '江苏省', '浙江省',
    # ...
    # '甘肃省', '青海省', '宁夏回族自治区', '新疆维吾尔自治区']
    gdpdata = {}
    gdpdata['region'] = regionlist
    gdpdata['data'] = resultlist
    # gdpdata=
    # {
    #  'region': ['北京市', '天津市', '河北省', '山西省', '内蒙古自治区'...],
    #  'data': [['1999', 3414.19, '福建省'],... ['1999', 1853.65, '江西省']]
    #  }
    response = jsonify(gdpdata)
    response.status_code = 200  # or 400 or whatever
    return jsonify(gdpdata)

@app.route('/echartdemo7')
def echartdemo7():
    return render_template('echartdemo7.html')

前台代码,比不定数量折线图更简单一些,直接读取json数据即可

代码语言:javascript复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <!-- 引入刚刚下载的 ECharts 文件 -->
    <!--script src="..staticjsecharts.min.js"></script-->
    <script src="/static/js/echarts.min.js"></script>
    <script src="/static/js/jquery.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'));
      // 指定图表的配置项和数据
      myChart.option = {
     xAxis: {
       type: 'category',
       data: []
     },
     yAxis: {
       type: 'value'
     },
     series: [
       {
         data: [],
         type: 'line'
       }
     ]
      };
   
      // 使用刚指定的配置项和数据显示图表。
      myChart.showLoading();
      
      $.ajax({
       url:'/getjson7',
       result:{},
       type:'GET',
       dataType:'json',
       success:function(result){
          gdpdata=result.data
          var gdpseries = [];
          //result=
          //{
         // 'region': ['北京市', '天津市', '河北省', '山西省', '内蒙古自治区'...],
         // 'data': [['1999', 3414.19, '福建省'],... ['1999', 1853.65, '江西省']]
         //}
          //result.region=['北京市', '天津市', '河北省', '山西省', '内蒙古自治区', '辽宁省', '吉林省', '黑龙江省',...]
          //result.data=
          //[
          //  ['1999', 3414.19, '福建省'],
          //   ... 
          //  ['1999', 1853.65, '江西省']
         //]

         myChart.hideLoading();
          // 填入数据
          myChart.setOption({
            tooltip: {
              trigger: 'axis',
              axisPointer: {
                type: 'line',
                lineStyle: {
                  color: 'rgba(0,0,0,0.2)',
                  width: 1,
                  type: 'solid'
                }
              }
            },
            legend: {
              data:result.region
            },
            singleAxis: {
              top: 50,
              bottom: 50,
              axisTick: {},
              axisLabel: {},
              type: 'time',
              axisPointer: {
                animation: true,
                label: {
                  show: true
                }
              },
              splitLine: {
                show: true,
                lineStyle: {
                  type: 'dashed',
                  opacity: 0.2
                }
              }
            },
            series: [
              {
                type: 'themeRiver',
                emphasis: {
                  itemStyle: {
                    shadowBlur: 20,
                    shadowColor: 'rgba(0, 0, 0, 0.8)'
                  }
                },
                data:result.data
              }
            ]             
          })
       },
       error:function (msg) {
         console.log(msg);
                   alert('系统发生错误');
            }
      })
      
      
    </script>
 </body>
 </html>

0 人点赞