Python使用策略模式绘制图片分析多组数据
- 趋势分析:折线图
- 静态比较:条形图
- 分布分析:箱线图
- 离散情况:散点图
import matplotlib.pylab as plt
from abc import ABC, abstractmethod
import seaborn as sns
import pandas as pd
import plotly.graph_objects as go
import plotly.io as pio
import altair as alt
from bokeh.plotting import figure, output_file, show
from bokeh.io import output_file, show
from bokeh.palettes import Category20c
from bokeh.plotting import figure, show
from bokeh.transform import cumsum
from math import pi
import numpy as npclass PlotStrategy(ABC):# 抽象类:强制子类实现此方法@abstractmethoddef plot(self, x_data, y_data, desc):passclass LineMulPlotStrategy(PlotStrategy):def plot(self, x_data, y_data, desc):print('折线图')plt.clf() # 清除当前图形内容arr_data = [d[list(d.keys())[0]] for d in y_data] # 提取数据arr_key = [list(d.keys())[0] for d in y_data]plt.plot(x_data, arr_data[0], label=arr_key[0])plt.plot(x_data, arr_data[1], label=arr_key[1])plt.xlabel(desc[1])plt.ylabel(desc[2])plt.title(desc[0])plt.legend()# plt.show()plt.savefig('./lineMul.png')class BarMulPlotStrategy(PlotStrategy):def plot(self, x_data, y_data, desc):print('柱状图')plt.clf() # 清除当前图形内容arr_data = [d[list(d.keys())[0]] for d in y_data] # 提取数据arr_key = [list(d.keys())[0] for d in y_data]bar_width = 0.35 # 条形宽度x_offset = 0.2 # 每个条形图的水平偏移量# 绘制第一个条形图# np.arange() 函数的作用是生成一个等差序列的一维数组。# 如果 x_data 是一个有 5 个元素的列表,那么 np.arange(len(x_data)) 将生成一个包含 0、1、2、3、4 的整数数组plt.bar(np.arange(len(x_data)) - x_offset, arr_data[0], width=bar_width, label=arr_key[0])# 绘制第二个条形图plt.bar(np.arange(len(x_data)) + x_offset, arr_data[1], width=bar_width, label=arr_key[1])# plt.bar(x_data, arr_data[0])# plt.bar(x_data, arr_data[1])plt.xlabel(desc[1])plt.ylabel(desc[2])plt.title(desc[0])# plt.show()plt.savefig('./BarMul.png')class BoxMulPlotStrategy(PlotStrategy):def plot(self, x_data, y_data, desc):print('箱线图')plt.clf() # 清除当前图形内容arr_data = [d[list(d.keys())[0]] for d in y_data] # 提取数据arr_key = [list(d.keys())[0] for d in y_data]plt.boxplot(arr_data, tick_labels=arr_key)plt.xlabel(desc[1])plt.ylabel(desc[2])plt.title(desc[0])# plt.show()plt.savefig('./BoxMul.png')class ScatterMulPlotStrategy(PlotStrategy):def plot(self, x_data, y_data, desc):print('散点图')plt.clf() # 清除当前图形内容arr_data = [d[list(d.keys())[0]] for d in y_data] # 提取数据arr_key = [list(d.keys())[0] for d in y_data]plt.scatter(x_data, arr_data[0], label=arr_key[0])plt.scatter(x_data, arr_data[1], label=arr_key[1])plt.xlabel(desc[1])plt.ylabel(desc[2])plt.title(desc[0])# 显示label对应的图例plt.legend()# plt.show()plt.savefig('./ScatterMul.png')# Context类持有PlotStrategy的引用。可以通过set_strategy方法动态地更改策略
class Context:def __int__(self, strategy: PlotStrategy):# _ 开头的变量,表示这是一个受保护的变量# 该变量只在类内部及其子类中使用,而不应在类外部直接访问self._strategy = strategydef set_strategy(self, strategy: PlotStrategy):self._strategy = strategydef execute_strategy(self, x_data, y_data, desc):self._strategy.plot(x_data, y_data, desc)x = ['A','B','C','D','E']
y = [{'key1':[2, 3, 6, 1, 4]},{'key2':[1, 2, 3, 4, 5]}]
desc = ['title', 'x', 'y']context = Context()context.set_strategy(LineMulPlotStrategy())
context.execute_strategy(x, y, desc)context.set_strategy(BarMulPlotStrategy())
context.execute_strategy(x, y, desc)context.set_strategy(BoxMulPlotStrategy())
context.execute_strategy(x, y, desc)context.set_strategy(ScatterMulPlotStrategy())
context.execute_strategy(x, y, desc)
折线图
柱状图
箱线图
散点图




相关文章:
Python使用策略模式绘制图片分析多组数据
趋势分析:折线图静态比较:条形图分布分析:箱线图离散情况:散点图 import matplotlib.pylab as plt from abc import ABC, abstractmethod import seaborn as sns import pandas as pd import plotly.graph_objects as go import p…...
【软件下载】Camtasia Studio 2024详细安装教程视频
习惯上来说Camtasia Studio是一款简单易用的高清录屏和视频编辑软件,拥有录制屏幕和配音、视频的剪辑和过场动画片、添加说明字幕和水印、制作视频封面和菜单、视频压缩和播放。不得不说Camtasia是一款屏幕录制和视频剪辑软件,教授课程,培训他…...
爬虫笔记15——爬取网页数据并使用redis数据库set类型去重存入,以爬取芒果踢V为例
下载redis数据库 首先需要下载redis数据库,可以直接去Redis官网下载。或者可以看这里下载过程。 pycharm项目文件下载redis库 > pip install redis 然后在程序中连接redis服务: from redis import RedisredisObj Redis(host127.0.0.1, port6379)…...
我是如何在markdown编辑器中完成视频的插入和播放的
如果你有更好用的编辑器组件,请一定推荐给我!!!(最好附带使用说明🤓️) 介绍 在开发一个社区页面的时候,需要完成发帖、浏览帖子的能力。这里考虑接入markdown编辑器进行开发,也符合大多数用户的习惯。 …...
Ltv 数据粘包处理
测试数据包的生成 校验程序处理结果和原始的日志保温解析是否一致 程序粘包分解正常...
银联支付,你竟然还不知道它怎么工作?
银联支付咱都用过,微信和支付宝没这么“横行”的时侯,我们取款、转账、付款时用的ATM机、POS机,都是银联支付完成的。 今天,就让咱们了解一下银行卡支付的工作原型。 首先,说说中国银联 中国银联(China U…...
查找程序中隐藏界面的思路
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动 某些程序,它会有管理员界面(比如棋牌游戏,它一般会有一个控制端界面,用来控制发牌、换牌),但是这种界…...
umount
umount命令用于卸载文件系统,使得挂载点的文件和目录变为不可访问。 基本用法: umount [选项] 设备或文件夹 常见选项: -f:强制卸载,即使文件系统处于忙碌状态(在某些情况下使用,如网络文件…...
electron录制应用-自由画板功能
功能 录屏过程中的涂画功能允许用户在录制屏幕操作的同时,实时添加注释和高亮显示,以增强信息的传达和观众的理解。 效果 electron录制-添加画布 代码实现 1、利用HTML5的Canvas元素实现一个自由涂画的功能,允许用户在网页上进行手绘创作。…...
版本控制工具-git分支管理
目录 前言一、git分支管理基本命令1.1 基本命令2.1 实例 二、git分支合并冲突解决三、git merge命令与git rebase命令对比 前言 本篇文章介绍git分支管理的基本命令,并说明如何解决git分支合并冲突,最后说明git merge命令与git rebase命令的区别。 一、…...
医卫医学试题及答案,分享几个实用搜题和学习工具 #学习方法#知识分享#经验分享
可以说是搜题软件里面题库较为齐全的一个了,收录国内高校常见的计算机类、资格类、学历类、外语类、工程类、建筑类等多种类型的题目。它可以拍照解题、拍照答疑、智能解题,并支持每日一练、章节练习、错题重做等特色功能,在帮助大家解答疑惑…...
在dolphinDB上直接保存一个dataframe为分布式数据表
步骤1:获取链接 import dolphindb as ddb from loguru import loggerdef get_dolphin_session():"""获取dolphinDB的session"""dolphin_config {"host": "127.0.0.1","port": 13900,"username&…...
awk
awk grep 查 sed 增删改查 awk 按行取列 awk默认分割符: 空格;tab键。多个空格压缩成一个空格 [roottest2 opt]# cat awk.txt 1 2 3 [roottest2 opt]# awk {print $3} awk.txt 3 awk的工作原理: 根据指令信息,逐行的读…...
如何加速AI原生应用进程?华为云开天aPaaS提出新范式
每一次新旧代际转换时,都会上演这样的一幕:“畅想很多,落地很少”,AI原生应用似乎也不例外。 关于AI原生应用的呼声已经持续一段时间,但普通用户对“AI原生”依然陌生。除了新业态普及的周期性,AI原生应用…...
Matlab基础语法:变量和数据类型,基本运算,矩阵和向量,常用函数,脚本文件
目录 一、变量和数据类型 二、基本运算 三、矩阵和向量 四、常用函数 五、脚本文件 六、总结 一、变量和数据类型 Matlab 支持多种数据类型,包括数值类型、字符类型和逻辑类型。掌握这些基本的变量和数据类型,是我们进行数学建模和计算的基础。 数…...
弥补iPhone不足,推荐金鸣识别等几款APP神器
在数字时代的浪潮中,iPhone以其独特的设计和强大的性能赢得了全球众多用户的喜爱。然而,即便是这样一款近乎完美的设备,也难免存在一些局限性和缺陷。幸运的是,App Store中蕴藏着许多鲜为人知的app,它们可以弥补iPhone…...
KLayout 中的默认数据类型
KLayout 中的默认数据类型 这里给大家介绍一下 KLayout 中的默认数据类型。从这个官方文档 KLayout 数据类型 中我们可以获取到 KLayout 中的默认数据类型有如下几种: Column 1Column 2TypeBoolean布尔值TypeCallback按键返回类型TypeDouble浮点数类型TypeInt整型Ty…...
视频云存储平台LntonCVS国标视频平台功能和应用场景详细介绍
LntonCVS国标视频融合云平台基于先进的端-边-云一体化架构设计,以轻便的部署和灵活多样的功能为特点。该平台不仅支持多种通信协议如GB28181、RTSP、Onvif、海康SDK、Ehome、大华SDK、RTMP推流等,还能兼容各类设备,包括IPC、NVR和监控平台。在…...
C语言 将程序第4,5行改为 c1=197;c2=198;将程序第3行改为int c1,c2;
问题代码如下: #include<stdio.h> int main() { char c1,c2; c197; c298; printf(“c1%c,c2%c\n”,c1,c2); printf(“c1%d,c2%d\n”,c1,c2); return 0; } 运行时会输出什么信息?为什么?如果将程序第4&am…...
【总线】AXI4第五课时:信号描述
大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
