百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

利用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结合后的效果:



此处先到这里,后续内容会抽时间在陆续补上,目前能想到的需要补充内容包括(不限于):

  1. Sanic模板的应用;
  2. Sanic部分设置内容;
  3. Python处理的数据传递到Echarts的方法;
  4. 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万字《阿里架构师进阶专题合集...