【详细教程】基于pyEchart的封装(附代码)

news2024/12/25 1:30:58

 

目  录

一、项目结构

二、文件封装

2.1echart.py

2.2pyechartMock.py

三、结果

3.1柱状图

3.2折线图

3.3饼状图


最近在学习pyechart,老师要我们画几个简单的图,比如折线图,柱状图,饼状图,我这里在参考pyechart文档之后,自己封装了一下,可能依旧有点丑陋,也欢迎各位老爷们指正!

参考文档:简介 - pyecharts - A Python Echarts Plotting Library built with love.

环境说明:python 3.7.0  使用的为V2版本的pyechart

一、项目结构

二、文件封装

请注意替换实际的项目相对路径

2.1echart.py

from pyecharts.charts import Bar,Line,Pie  # 画条形图,折线图,饼图
from pyecharts import options as op
# 下载图片的工具函数
from snapshot_selenium import snapshot
# 生成图片的函数
from pyecharts.render import make_snapshot
# 饼状图需要模拟数据
from pyecharts.faker import Faker
# 导入mock数据
from 实验报告文档.实验代码.lab4.myFun.data.pyechartMock import *


# 获取图片 传入bar对象和 文件路径
def generatePic(bar,filePath):
    make_snapshot(snapshot,bar.render(),filePath)

# 画柱状图
# 1.传入一个横坐标,
# 2.传入一个包含y轴数据的字典,里面包含多个种类的数据
# 3.传入一个标题对象 里面包含标题和副标题
# 4.html生成的路径
def drawBar(xLabelList,yLabelDict,titleDict,targetPath):
    bar = Bar()
    bar.add_xaxis(xLabelList)
    for k,v in yLabelDict.items():
        bar.add_yaxis(k,v)
    bar.set_global_opts(title_opts=op.TitleOpts(title=titleDict['title'],subtitle=titleDict['subTitle']))
    bar.render(targetPath) # 渲染 生成html
    # generatePic(bar,filePath) # 要画很久 性能不行!!!

# 画折线图
# 1.传入一个横坐标内容列表  week_name_list
# 2.传入一个数据字典 dataDict  里面包含多个对象 每个对象包含一个name 一个itemYLabelList
# 3.传入title对象
# 4.传入是否显示工具选项
def drawLine(xLabelList,yLabelDict,titleDict,targetPath,showTools):
    line = Line()
    line.add_xaxis(xaxis_data=xLabelList)
    for k,v in yLabelDict.items():
        line.add_yaxis(
            series_name=k,
            y_axis=v,
            markpoint_opts=op.MarkPointOpts(
                data=[
                    # op.MarkPointItem(type_="max", name="最大值"), # 标记最大值点
                    # op.MarkPointItem(type_="min", name="最小值"), # 标记最小值点
                ]
            ),
            markline_opts=op.MarkLineOpts(
                data=[
                    # op.MarkLineItem(symbol="circle", type_="max", name="最高点"),  # 标记最高值线
                    # op.MarkLineItem(type_="average", name="平均值"),               # 标记均值线
                    # op.MarkLineItem(symbol="circle", type_="min", name="最低点"),  # 标记最低值线
                ]
            ),
        )
    line.set_global_opts(
            title_opts=op.TitleOpts(title=titleDict['title'], subtitle=titleDict['subTitle']),
            tooltip_opts=op.TooltipOpts(trigger="axis"),
            toolbox_opts=op.ToolboxOpts(is_show=showTools), # 这里设置是否显示下载等工具
            xaxis_opts=op.AxisOpts(type_="category", boundary_gap=False),
        )
    line.render(targetPath)

# 画饼状图
# 1.一个名字列表
# 2.一个值列表
# 3.一个颜色列表
# 4.一个文件生成路径
# 5.一个标题对象
def drawPine(nameList,valueList,colorList,titleDict,targetPath):
    pie = Pie()
    pie.add("",[list(z) for z in zip(nameList,valueList)])
    pie.set_colors(colorList)
    pie.set_global_opts(title_opts=op.TitleOpts(title=titleDict['title']))
    pie.set_series_opts(label_opts=op.LabelOpts(formatter="{b}: {c}"))
    pie.render(targetPath)


# 因为是给./data/pyechartMock调用的,所以写../ (x) 这种想法是错误的!!!
# import 就相当于将函数定义在当前文件了!!!
barFilePath = r'./pic/bar.html'
lineFilePath = r'./pic/line.html'
pieFilePath = r'./pic/pie.html'

# pyechart unit testing
if __name__ == '__main__':
    print("主函数运行成功!")
    # 测试bar图像
    drawBar(BarList,BarDict,BarTitle,barFilePath)
    drawLine(LineList,LineDict,LineTitle,lineFilePath,showTools=True)
    drawPine(PieNameList,PieValueList,PieColorList,PieTitle,pieFilePath)
    # drawPine(pieFilePath)

2.2pyechartMock.py

import random

LISTNUM = 10    # x轴种类
DICTNUM = 5     # y轴种类
BarList = ['物品'+str(i) for i in range(LISTNUM)]
BarDict = dict()

BarTitle = {
    'title':'这是柱状图的主标题',
    'subTitle': '这是柱状图的副标题',
}
# 0 -> A
def numToAlph(num):
    return chr(num+65)
# A -> 0
def alphToNum(ch):
    return ord(ch)-65

for i in range(DICTNUM):
    BarDict['商家'+str(numToAlph(i))] = [random.randint(10,100) for i in range(LISTNUM)]

################################################
LineList = ['星期'+str(i) for i in range(LISTNUM)]
LineDict = dict()

LineTitle = {
    'title':"这是折线图的主标题",
    'subTitle': '这是折线图的副标题',
}

for i in range(DICTNUM):
    LineDict["种类"+str(numToAlph(i))] = [random.randint(10,100) for i in range(LISTNUM)]

################################################
PieNameList = ['名字'+str(i) for i in range(LISTNUM)]
PieValueList = [random.randint(10,90)//10 for i in range(LISTNUM)]
PieColorList = ["blue", "green", "yellow", "red", "pink", "orange", "purple"]

PieTitle = {
    'title':"这是饼状图的主标题",
    'subTitle': '这是饼状图的副标题',
}

三、结果

3.1柱状图

3.2折线图

3.3饼状图

这样,当你想用啥的时候,也可以自己mock模拟一些数据,丢到这个函数里面,非常方便! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++ 获取机器码

看到网上代码代码都没什么好的&#xff0c;自己备用一个 #include <iostream> #include <string> #include <sstream> #include <iomanip> #include <Windows.h> #include <iphlpapi.h> // 包含这个头文件以获取 PIP_ADAPTER_INFO #inclu…

NSSCTF | [SWPUCTF 2021 新生赛]easyrce

这是一道很简单的RCE&#xff08;远程命令执行&#xff09;&#xff0c;打开题目后可以看到一个php脚本。 <?php error_reporting(0); highlight_file(__FILE__); if(isset($_GET[url])) { eval($_GET[url]); } ?> 直接传入url参数就可以执行相应的命令&#xff0c;先…

求职网络安全:这个领域的就业机会正在增长

随着大安全时代的到来&#xff0c;网络安全已经从虚拟空间延伸到现实空间。当今网络战愈演愈烈&#xff0c;网络军备赛即将来临。网络空间领域的战争归根到底还是人才的竞争。面对新形势,建立高效的网络安全人才培养体系对中国信息安全产业发展和保证国家安全来讲都至关重要! 目…

AnythingLLM+Ollama构建本地知识库

前言 这是一个全栈应用程序&#xff0c;可以将任何文档、资源&#xff08;如网址链接、音频、视频&#xff09;或内容片段转换为上下文&#xff0c;以便任何大语言模型&#xff08;LLM&#xff09;在聊天期间作为参考使用。此应用程序允许您选择使用哪个LLM或向量数据库&#…

【MySQL 数据宝典】【事务锁】- 002 事务控制的演进

一、事务处理思路 1.1 排队 排队处理是事务管理最简单的方法&#xff0c;就是完全顺序执行所有事务的数据库操作&#xff0c;不需要加锁&#xff0c;简单的说就是全局排队。序列化执行所有的事务单元&#xff0c;数据库某个时刻只处理一个事务操作&#xff0c;特点是强一致性…

探索智慧推理:线上剧本杀小程序引领新潮流

随着科技的飞速发展&#xff0c;线上剧本杀小程序作为一种新兴的数字娱乐形式&#xff0c;正以其独特的魅力引领着新潮流&#xff0c;并在内容创造上展现出无限的潜力。这种融合了角色扮演、推理解谜和社交互动的游戏模式&#xff0c;不仅为用户带来了沉浸式的体验&#xff0c;…

跨境电商行业蓬勃发展,武汉星起航引领卖家孵化新潮流

近年来&#xff0c;我国跨境电商行业在政府的大力扶持下呈现出强劲的发展势头。随着国内制造业结构的加速调整与居民消费需求升级态势的持续凸显&#xff0c;跨境出口规模占比稳步提升&#xff0c;跨境进口规模同样不断扩大&#xff0c;行业市场规模持续增长。在这一背景下&…

卷积模型的剪枝、蒸馏---蒸馏篇--NST特征蒸馏(以deeplabv3+为例)

本文使用NST特征蒸馏实现deeplabv3+模型对剪枝后模型的蒸馏过程; 一、NST特征蒸馏简介 下面是两张叠加了热力图(heat map)的图片,从图中很容易看出这两个神经元具有很强的选择性:左图的神经元对猴子的脸部非常敏感,右侧的神经元对字符非常敏感。这种激活实际上意味着神经…

React - sass配置

1. idea下载Easy Sass插件&#xff1a; 2. 启用后&#xff0c;我们写的scss文件不能直引用&#xff0c;所以还要下载sass依赖&#xff1a; (推荐使用.scss&#xff0c;因为与原生.css写法接近&#xff0c;.sass格式更严格) // 下载sass依赖 npm install sass sass-loader --s…

【SRC实战】前端脱敏信息泄露

挖个洞先 https://mp.weixin.qq.com/s/xnCQQCAneT21vYH8Q3OCpw “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合 ” 01 — 漏洞证明 一、前端脱敏&#xff0c;请求包泄露明文 “ 前端脱敏处理&#xff0c;请求包是否存在泄露&#xff1f; ” 1、获取验…

活字格中如何在表格中双击打开链接字段显示的网页

有没有遇到过这种情况:你在浏览一个数据表,里面列出了一堆网址链接,你需要一个个打开查看?如果表格里有上百个链接,那就相当痛苦了。幸运的是,我们有一个小技巧可以让这项重复工作变得无比简单高效。 以下步骤&#xff1a; 1、拖入数据表中的url字段。 2、在表格组件中“编辑…

SMART700西门子触摸屏维修6AV6 648-0CC11-3AX0

西门子工控机触摸屏维修系列型号&#xff1a;PС477,PC677,TD200,TD400,KTP178,TP170A,TP170B,TP177A,TP177B,TP270,TP277,TP27,MP370,MP277,OP27,OP177B等。 触摸屏故障有&#xff1a;上电黑屏, 花屏,暗屏,触摸失灵,按键损坏,电源板,高压板故障,液晶,主板坏等,内容错乱、进不了…

(ICLR,2024)GRAFT:通过地面远程对齐无需文本注释训练遥感图像的视觉语言模型

文章目录 相关资料摘要引言方法图像级VLMs像素级VLMs收集地面-卫星图像对用基础模型增强GRAFT VLMs 实验图像级理解像素级理解 相关资料 论文&#xff1a;Remote Sensing Vision-Language Foundation Models without Annotations via Ground Remote Alignment 项目地址&#x…

怎么把手机ip地址变成了外省

在日常使用中&#xff0c;有时我们可能因为某些原因需要快速切换手机的IP地址&#xff0c;特别是当需要从一个省份切换到另一个省份的IP时。这种需求可能来源于网络访问限制、地理位置相关服务的使用、或者网络安全等方面的考虑。那么&#xff0c;怎么把手机IP地址变成外省呢&a…

CUDA C编程:第一个程序 向量相加点积

我的电脑没有装CUDA&#xff0c;所以使用租了带GPU的云服务器&#xff0c;然后使用vscode SSH远程连接云服务器。云GPU使用的是智星云&#xff0c;0.8元/h。 智星云 可以使用nvcc --version查看系统中安装的CUDA版本。 然后写第一个CUDA程序&#xff0c;两个向量相加结果给到…

三维点云处理-聚类(下)

接着前一部分数据聚类方法的介绍&#xff0c;由于K-means和GMM方法都是基于欧式距离信息处理的&#xff0c;两者分别以圆形和椭圆形来作为数据的聚类分割方式&#xff0c;这种情况下会导致环形图和月牙图数据分割不准确&#xff0c;因此进一步的介绍一种谱聚类方法&#xff0c;…

力扣每日一题- 给植物浇水 II -2024.5.9

力扣题目&#xff1a;给植物浇水 II 题目链接: 2105.给植物浇水 II 题目描述 代码思路 根据题目内容&#xff0c;使用双指针从左右两边同时向中间移动&#xff0c;模拟浇水过程即可。 代码纯享版 class Solution {public int minimumRefill(int[] plants, int capacityA, …

启用dell服务器的iDRAC

插网线 观察到 dell服务器背板左侧有一个网口&#xff0c;标有iDRAC字样&#xff0c;使用网线将该网口和网段所在的交换机连接起来。 网络配置 重启计算机&#xff0c;依照屏幕显示按F2进入SystemSetup。选择iDRACsettings – Network&#xff0c;需要改动的如下&#xff08;现…

使用Pandas对Data列进行基于顺序的分组排列

目录 一、引言 二、Pandas库简介 三、按照数据列中元素出现的先后顺序进行分组排列 四、案例分析 五、技术细节探讨与扩展应用 1. 技术细节 2. 扩展应用 3. 示例代码&#xff1a;用户行为分析 4. 进阶应用&#xff1a;分组后的聚合操作 5. 分组后的数据筛选 6. 分组…

代码随想录算法训练营第二十五天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 题目链接/文章讲解&#xff1a; 代码随想录 视频讲解&#xff1a; 你修剪的方式不对&#xff0c;我来给你纠正一下&#xff01;| LeetCode&#xff1a;669. 修剪二叉搜索树_哔哩哔哩_bilibili 解题思路 在上一题的删除二叉树节点中&#xff0c;我们通过在…