当前位置: 首页 > news >正文

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;

问题代码如下&#xff1a; #include<stdio.h> int main() { char c1,c2; c197; c298; printf(“c1%c,c2%c\n”&#xff0c;c1,c2); printf(“c1%d,c2%d\n”&#xff0c;c1,c2); return 0; } 运行时会输出什么信息&#xff1f;为什么&#xff1f;如果将程序第4&am…...

【总线】AXI4第五课时:信号描述

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…...

CVPR/ICML/TMI顶会风向标:医学图像分割三大落地范式,从模型精调到临床闭环

1. 医学图像分割的临床落地挑战与范式转变 医学图像分割作为AI在医疗领域最成熟的应用之一&#xff0c;正经历着从实验室精度竞赛到临床实用落地的关键转型。我在参与多家三甲医院PACS系统智能化改造时发现&#xff0c;临床医生对算法的需求呈现明显的"三高"特征&…...

计算机毕业设计springboot鲜花在线商城 基于SpringBoot的园艺花卉网络销售系统 基于Java Web的线上花店订购管理平台

计算机毕业设计springboot鲜花在线商城911yt9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联xi 可分享近年来&#xff0c;互联网技术的迅猛发展和智能终端设备的全面普及&#xff0c;为传统零售行业带来…...

这次终于选对了!2026年最值得体验的专业AI论文软件

2026年AI论文写作工具已从“内容生成”进化为融合学术规范与智能优化的全流程解决方案&#xff0c;核心评价维度涵盖文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规等关键指标。本次测评覆盖6款主流工具&#xff0c;涵盖中英文、全流程与专项功能、免费与付费版本&am…...

从零开始:Linux系统部署AI视频生成工具Sora.FM的实战指南

从零开始&#xff1a;Linux系统部署AI视频生成工具Sora.FM的实战指南 【免费下载链接】sorafm 项目地址: https://gitcode.com/GitHub_Trending/so/sorafm 在数字化内容创作领域&#xff0c;AI视频生成技术正在引领一场新的革命。Sora.FM作为基于Sora AI技术的创新平台…...

M2LOrder模型Git版本控制实践:团队协作下的模型微调与部署

M2LOrder模型Git版本控制实践&#xff1a;团队协作下的模型微调与部署 你是不是也遇到过这样的情况&#xff1f;团队里几个人一起折腾一个AI模型&#xff0c;今天张三改了点代码&#xff0c;明天李四更新了配置文件&#xff0c;后天王五又传了个新数据集。结果没过几天&#x…...

OpenRocket:开源火箭仿真软件的设计与分析全指南

OpenRocket&#xff1a;开源火箭仿真软件的设计与分析全指南 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket OpenRocket作为一款专业的开源火箭设计与仿真…...

如何零门槛拥有专属AI数字人?Duix.Avatar全流程实践指南

如何零门槛拥有专属AI数字人&#xff1f;Duix.Avatar全流程实践指南 【免费下载链接】Duix-Avatar 项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar 想制作个人数字分身却被技术门槛劝退&#xff1f;每月花费数千元购买商业数字人服务让你望而却步&…...

ESP32S3端口死活不识别?别急着换线,先试试这个USB驱动修复大法

ESP32S3端口识别难题&#xff1a;从底层原理到实战修复的全方位指南 当你满怀期待地将ESP32S3开发板连接到电脑&#xff0c;准备开始物联网项目的开发时&#xff0c;却发现设备管理器里怎么也找不到对应的COM端口——这种挫败感我深有体会。作为一款功能强大的Wi-Fi/蓝牙双模芯…...

GLM-OCR与LSTM网络融合实践:提升连续手写体文本识别效果

GLM-OCR与LSTM网络融合实践&#xff1a;提升连续手写体文本识别效果 最近在折腾一个挺有意思的项目&#xff0c;朋友那边有个需求&#xff0c;要识别一些手写的病历和处方。你懂的&#xff0c;医生那笔迹&#xff0c;龙飞凤舞&#xff0c;连笔连得飞起&#xff0c;传统的OCR工…...

AtlasOS系统Xbox控制器驱动问题:三步解决方案与预防指南

AtlasOS系统Xbox控制器驱动问题&#xff1a;三步解决方案与预防指南 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atl…...