flask+echarts數(shù)據(jù)可視化

最近忙著寫數(shù)據(jù)可視化的東西,簡書也很久沒有寫了摄悯,我是基于flask+echarts做的數(shù)據(jù)可視化峡竣。

app.py中

from flask import Flask, render_template, Response
import json

app = Flask(__name__)
app.debug = True


@app.route('/')
def hello_world():
    return 'Hello World!'


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

def Response_headers(content):
    resp = Response(content)
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

@app.route('/echarts',methods=['GET','POST'])
def echarts():
    import pymysql
    lst = []
    conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123',database='renkou',charset='utf8')
    cur = conn.cursor()
    cur.execute("""
    select * from china_population;
    """)
    for row in cur.fetchall():
        dic = {}
        dic['name'] = row[1]
        dic['num'] = row[2]
        lst.append(dic)

    datas = {
        "data": lst
    }
    content = json.dumps(datas)
    resp = Response_headers(content)
    return resp

@app.errorhandler(403)
def page_not_found(error):
    content = json.dumps({"error_code": "403"})
    resp = Response_headers(content)
    return resp


@app.errorhandler(404)
def page_not_found(error):
    content = json.dumps({"error_code": "404"})
    resp = Response_headers(content)
    return resp


@app.errorhandler(400)
def page_not_found(error):
    content = json.dumps({"error_code": "400"})
    resp = Response_headers(content)
    return resp


@app.errorhandler(410)
def page_not_found(error):
    content = json.dumps({"error_code": "410"})
    resp = Response_headers(content)
    return resp


@app.errorhandler(500)
def page_not_found(error):
    content = json.dumps({"error_code": "500"})
    resp = Response_headers(content)
    return resp

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
    <meta charset="utf-8">
    <!-- 引入 ECharts 文件 -->
    <script src="/static/echarts.min.js"></script>
    <script src="/static/jquery.js"></script>
</head>
<body>
    <div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
        var a = echarts;
        var myChart = a.init(document.getElementById('main'));
         // 顯示標題,圖例和空的坐標軸
         myChart.setOption({
             title: {
                 text: '城市人口數(shù)'
             },
             tooltip : {
            trigger: 'axis'
            },
            legend: {
                data:['今日數(shù)據(jù)']
            },
            toolbox: {
                show : true,
                feature : {
                    mark : {show: true},
                    dataView : {show: true, readOnly: false},
                    magicType : {show: true, type: ['line', 'bar']},
                    // restore : {show: true},
                    // saveAsImage : {show: true}
                }
            },
            calculable : true,

             xAxis : [
                {
                    type : 'category',
                    boundaryGap : false,
                    data : []
                }
            ],
             yAxis : [
                {
                    type : 'value',
                    axisLabel : {
                        formatter: '{value}'
                    }
                }
            ],
             dataZoom: [
            {
                show: true,
                start: 94,
                end: 100
            },
            {
                type: 'inside',
                start: 94,
                end: 100
            },
            {
                show: true,
                yAxisIndex: 0,
                filterMode: 'empty',
                width: 30,
                height: '80%',
                showDataShadow: false,
                left: '93%'
            }
        ],
             series : [
                {
                    name:'最多數(shù)量',
                    type:'line',
                    data:[],
                    markPoint : {
                        data : [
                            {type : 'max', name: '最大值'},
                            {type : 'min', name: '最小值'}
                        ]
                    },
                    markLine : {
                        data : [
                            {type : 'average', name: '平均值'}
                        ]
                    }
                },]
         });
         myChart.showLoading();    //數(shù)據(jù)加載完之前先顯示一段簡單的loading動畫
         var names=[];    //名稱數(shù)組(實際用來盛放X軸坐標值)
         var nums=[];    //數(shù)量數(shù)組(實際用來盛放Y坐標值)
         $.ajax({
         type : "get",
         url : "http://127.0.0.1:5000/echarts",    //請求發(fā)送到Servlet處
//       data : {},
         dataType : "json",        //返回數(shù)據(jù)形式為json
         success : function(result) {
             //請求成功時執(zhí)行該函數(shù)內(nèi)容凛澎,result即為服務器返回的json對象
             if (result) {
//              alert(result["data"]);
                    for(var i=0;i<result["data"].length;i++){
//                        alert(result["data"][i]["name"]);
                       names.push(result["data"][i]["name"]);    //挨個取出名稱并填入類別數(shù)組
                     }
                    for(var i=0;i<result["data"].length;i++){
//                      alert(result["data"][i]["num"]);
                        nums.push(result["data"][i]["num"]);    //挨個取出數(shù)量并填入銷量數(shù)組
                      }
                    myChart.hideLoading();    //隱藏加載動畫
                    myChart.setOption({        //加載數(shù)據(jù)圖表
                        xAxis: {
                            data: names
                        },
                        series: [{
                            // 根據(jù)名字對應到相應的系列
                            name: '數(shù)量',
                            data: nums
                        }]
                    });

             }

        },
         error : function(errorMsg) {
             //請求失敗時執(zhí)行該函數(shù)
         alert("圖表請求數(shù)據(jù)失敗!");
         myChart.hideLoading();
         }
    })
    </script>


</body>
</html>

數(shù)據(jù)庫數(shù)據(jù)


CB2578E3-20AF-49FA-BAEE-545BBD525392.png

展示出來的圖像


A918F081-E83B-46EB-AA9B-F03E5E748D29.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霹肝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子塑煎,更是在濱河造成了極大的恐慌沫换,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件最铁,死亡現(xiàn)場離奇詭異讯赏,居然都是意外死亡垮兑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門漱挎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來系枪,“玉大人,你說我怎么就攤上這事磕谅∷揭” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵膊夹,是天一觀的道長当犯。 經(jīng)常有香客問我,道長割疾,這世上最難降的妖魔是什么嚎卫? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮宏榕,結(jié)果婚禮上拓诸,老公的妹妹穿的比我還像新娘。我一直安慰自己麻昼,他們只是感情好奠支,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抚芦,像睡著了一般倍谜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叉抡,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天尔崔,我揣著相機與錄音,去河邊找鬼褥民。 笑死季春,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的消返。 我是一名探鬼主播载弄,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撵颊!你這毒婦竟也來了宇攻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤倡勇,失蹤者是張志新(化名)和其女友劉穎逞刷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡亲桥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年洛心,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片题篷。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡词身,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出番枚,到底是詐尸還是另有隱情法严,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布葫笼,位于F島的核電站深啤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏路星。R本人自食惡果不足惜溯街,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洋丐。 院中可真熱鬧呈昔,春花似錦、人聲如沸友绝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迁客。三九已至郭宝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掷漱,已是汗流浹背粘室。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留切威,地道東北人育特。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像先朦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子犬缨,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 3,001評論 1 3
  • python 也是很值得學習的一門工具喳魏。學好python和R。 1環(huán)境管理 管理 Python 版本和環(huán)境的工具 ...
    Liam_ml閱讀 4,837評論 1 51
  • 2017年的一個計劃就是開始寫點東西怀薛。之前用hexo借著github.io的域名搭了個博客刺彩,后來覺得挺麻煩,寫了兩...
    hy9be閱讀 420評論 0 1
  • 偶爾學習到的一項小技能嗡害,親測好用,現(xiàn)在分享給大家畦攘。 如何進入:小程序的名字叫做“小紙條微應用”霸妹,打開微信直接搜索或...
    戶外運動_老A閱讀 2,694評論 0 0
  • 隨著胎兒的一天天長大,有些準媽媽們的肚皮上也逐漸出現(xiàn)了妊娠紋知押,但是有些卻沒有叹螟。于是有妊娠紋的孕媽就很好奇“懷...
    bayi6501閱讀 4,849評論 0 0