利用Sanic框架实现Python + echarts 数据可视化展现(一)
bigegpt 2025-01-20 10:57 3 浏览
Python是数据分析的利器,近年来在各领域应用的十分广泛。有时候我们会需要把数据分析的结界进行一些可视化的展示,很多时候一般的数据可视化可以使用Matplotlib等,但是如果是面向一些非专业人士,直接通过Web的方式进行展示会更加的方便和优美。
先看一下基本效果,虽然比较简陋,差不多该有的都有了,需要更漂亮的页面,可以在自己美化一下。
关于工具和框架的选择
- 为什么选择Sanic?
Python可用的Web框架选择性很多,比如大而全的Django,小而美的Flask等;此处选择了Sanic框架,主要是因为其轻量化和快速的特点;另外还有一个更重要的特点,就是Sanic自身就是一个可应用于生产环境的Web服务应用,不需要其他Nginx、或者Apache等其他工具去部署。(对于不熟悉Web环境的人来说,这些应用部署花费的精力还是挺高的)
- 为什么选择Echarts?
这主要是因为之前使用的多了,比较熟悉,而且有非常完善的中文文档,使用也比较方便。
- 为什么没有使用Pyecharts?
Pyecharts功能挺强大,使用也挺方便,如果简易环境下可以选择使用。当然,不喜欢使用JS、CSS和HTML的也建议选择使用。个人没选择主要还是考虑后续的部署展示,所以还是一步到位,直接应用 Sanic + Echarts 。另外,Echarts的使用和配置确实比较简单。
开始之前,建议先打开Sanic文档和Echarts文档,随时查看需要的信息。
准备开始第一步
1、可以先新建一个虚拟环境;(当然这并不是必须的)
2、安装Sanic;
# 直接安装
pip install sanic
# 安装sanic_jinja2,用于html模板的应用
pip install sanic_jinja2
3、新建一个py文件,一个html文件,一个js文件;
- py文件最精简内容:
import os, time, datetime
from sanic import Sanic
app = Sanic("MyEcharts")
@app.get("/sync")
def sync_handler(request):
time.sleep(3)
return text("sync Done. 完成")
@app.get("/async")
async def async_handler(request):
await asyncio.sleep(0.1)
return text("async+async+async+Done. 完成!")
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8080)
直接运行这个文件就已经可以建立一个web服务了!当然这距离我们的项目还有点距离。
此时,在浏览器输入http://127.0.0.1:8080/sync,就能看见我们的运行结果了;
- html文件精简内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>XXXX数据概览</title>
</head>
<body>
<div class="container-fluid">
<!-- Content here -->
<div class="row text-center" id="title">
<h1>XXXX系统数据展示</h1>
</div>
<div class="row">
<div class="col">
<i>数据A展示一 | 数据二
<p style="font-size: 52px;color: rgba(0, 59, 144, 1.0);">
1258 <small style="color: #000;">|</small> 376
</p>
</i>
</div>
<div class="col">
<i>数据B展示一 | 数据二
<p style="font-size: 52px;color: rgba(0, 59, 144, 1.0);">
5896 <small style="color: #000;">|</small> 998
</p>
</i>
</div>
<div class="col">
<i>数据C展示一 | 数据二
<p style="font-size: 52px;color: rgba(0, 59, 144, 1.0);">
4896 <small style="color: #000;">|</small> 1199
</p>
</i>
</div>
<div class="col col-md-auto">
<i>总数 | 待通知数 | 待接收数 | 已接收数
<p style="font-size: 52px;color: rgba(0, 59, 144, 1.0);">
9258 <small style="color: #000;">|</small>
1385 <small style="color: #000;">|</small>
2459 <small style="color: #000;">|</small>
2546
</p>
</i>
</div>
</div>
<div class="row">
<div class="col" style="color: #FF0000; border: 1px solid #000;">
<h2>表一数据信息</h2>
<p>1 of 2</p>
</div>
<div class="col" style="color: #00FF00;">
<h2>XXXX状态数据信息</h2>
2 of 2
</div>
<div class="col">
<h2>XXXX数据信息</h2>
1 of 3
</div>
</div>
<div class="row">
<div class="col col-9">
<h2>XXXX数据信息</h2>
</div>
<div class="col col-3">
<h2>XXXX数据信息</h2>
</div>
</div>
</body>
</html>
这个基本就是一个简单的web页面了,虽然很简陋,装修的事情后面在处理。
基本看起来是这种样子
至于具体的页面排版,可以按自己的需求去修改。
- js文件基本内容:(内容源自官方示例)
var chartDom01 = document.getElementById('chart01');
var myChart01 = echarts.init(chartDom01);
var option01;
option01 = {
legend: {
top: 'bottom'
},
toolbox: {
show: true,
feature: {
mark: { show: true },
dataView: { show: true, readOnly: false },
restore: { show: true },
saveAsImage: { show: true }
}
},
series: [
{
name: 'Nightingale Chart',
type: 'pie',
radius: [50, 250],
center: ['50%', '50%'],
roseType: 'area',
itemStyle: {
borderRadius: 8
},
data: [
{ value: 40, name: 'rose 1' },
{ value: 38, name: 'rose 2' },
{ value: 32, name: 'rose 3' },
{ value: 30, name: 'rose 4' },
{ value: 28, name: 'rose 5' },
{ value: 26, name: 'rose 6' },
{ value: 22, name: 'rose 7' },
{ value: 18, name: 'rose 8' }
]
}
]
};
option01 && myChart01.setOption(option01);
var chartDom02 = document.getElementById('chart02');
var myChart02 = echarts.init(chartDom02);
var option02;
option02 = {
title: {
text: 'Waterfall Chart',
subtext: 'Living Expenses in Shenzhen'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
formatter: function (params) {
var tar = params[1];
return tar.name + '<br/>' + tar.seriesName + ' : ' + tar.value;
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
splitLine: { show: false },
data: ['Total', 'Rent', 'Utilities', 'Transportation', 'Meals', 'Other']
},
yAxis: {
type: 'value'
},
series: [
{
name: 'Placeholder',
type: 'bar',
stack: 'Total',
itemStyle: {
borderColor: 'transparent',
color: 'transparent'
},
emphasis: {
itemStyle: {
borderColor: 'transparent',
color: 'transparent'
}
},
data: [0, 1700, 1400, 1200, 300, 0]
},
{
name: 'Life Cost',
type: 'bar',
stack: 'Total',
label: {
show: true,
position: 'inside'
},
data: [2900, 1200, 300, 200, 900, 300]
}
]
};
option02 && myChart02.setOption(option02);
/ / 其他内容都是类似的…………
js、css和html结合后的效果:
此处先到这里,后续内容会抽时间在陆续补上,目前能想到的需要补充内容包括(不限于):
- Sanic模板的应用;
- Sanic部分设置内容;
- Python处理的数据传递到Echarts的方法;
- Echarts图表部分设置内容;
第一次在头条写文章,有不足之处还请见谅;学习道路上的小学生,如有错误或疏漏之处,还请大家批评指正。
相关推荐
- 10w qps缓存数据库——Redis(redis缓存调优)
-
一、Redis数据库介绍:Redis:非关系型缓存数据库nosql:非关系型数据库没有表,没有表与表之间的关系,更不存在外键存储数据的形式为key:values的形式c语言写的服务(监听端口),用来存...
- Redis系列专题4--Redis配置参数详解
-
本文基于windowsX64,3.2.100版本讲解,不同版本默认配置参数不同在Redis中,Redis的根目录中有一个配置文件(redis.conf,windows下为redis.windows....
- 开源一夏 | 23 张图,4500 字从入门到精通解释 Redis
-
redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。...
- redis的简单与集群搭建(redis建立集群)
-
Redis是什么?是开源免费用c语言编写的单线程高性能的(key-value形式)内存数据库,基于内存运行并支持持久化的nosql数据库作用主要用来做缓存,单不仅仅是做缓存,比如:redis的计数器生...
- 推荐几个好用Redis图形化客户端工具
-
RedisPlushttps://gitee.com/MaxBill/RedisPlusRedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows、Linux...
- 关于Redis在windows上运行及fork函数问题
-
Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成。微软的一些工程师花费时间在解决在...
- 你必须懂的Redis十大应用场景(redis常见应用场景)
-
Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。...
- 极简Redis配置(redis的配置)
-
一、概述Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf,linux下的是redis.conf)你可以通过C...
- 什么是redis,怎么启动及如何压测
-
从今天起咱们一起来学习一下关于“redis监控与调优”的内容。一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。...
- 一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI
-
介绍P3XRedisUI这是一个非常实用的RedisGUI,提供响应式WebUI访问或作为桌面应用程序使用,桌面端是跨平台的,而且完美支持中文界面。Githubhttps://github....
- windows系统的服务器快速部署java项目环境地址
-
1、mysql:https://dev.mysql.com/downloads/mysql/(msi安装包)2、redis:https://github.com/tporadowski/redis/r...
- window11 下 redis 下载与安装(windows安装redis客户端)
-
#热爱编程是一种怎样的体验#window11下redis下载与安装1)各个版本redis下载(windows)https://github.com/MicrosoftArchive/r...
- 一款轻量级的Redis客户端工具,贼好用!
-
使用命令行来操作Redis是一件非常麻烦的事情,我们一般会选用客户端工具来操作Redis。今天给大家分享一款好用的Redis客户端工具TinyRDM,它的界面清新又优雅,希望对大家有所帮助!简介Ti...
- 一个.NET开发且功能强大的Windows远程控制系统
-
我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍SiMayRemoteMonitorOS是一个基于Windows的远程控制系统,完...
- Redis客户端工具详解(4款主流工具)
-
大家好,我是mikechen。Redis是大型架构的基石,也是大厂最爱考察内容,今天就给大家重点详解4款Redis工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- skip-name-resolve (63)
- linuxlink (65)
- pythonwget (67)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)