当前位置: 首页 > 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)

折线图
柱状图
箱线图
散点图

 

http://www.lryc.cn/news/382146.html

相关文章:

  • 【软件下载】Camtasia Studio 2024详细安装教程视频
  • 爬虫笔记15——爬取网页数据并使用redis数据库set类型去重存入,以爬取芒果踢V为例
  • 我是如何在markdown编辑器中完成视频的插入和播放的
  • Ltv 数据粘包处理
  • 银联支付,你竟然还不知道它怎么工作?
  • 查找程序中隐藏界面的思路
  • umount
  • electron录制应用-自由画板功能
  • 版本控制工具-git分支管理
  • 医卫医学试题及答案,分享几个实用搜题和学习工具 #学习方法#知识分享#经验分享
  • 在dolphinDB上直接保存一个dataframe为分布式数据表
  • awk
  • 如何加速AI原生应用进程?华为云开天aPaaS提出新范式
  • Matlab基础语法:变量和数据类型,基本运算,矩阵和向量,常用函数,脚本文件
  • 弥补iPhone不足,推荐金鸣识别等几款APP神器
  • KLayout 中的默认数据类型
  • 视频云存储平台LntonCVS国标视频平台功能和应用场景详细介绍
  • C语言 将程序第4,5行改为 c1=197;c2=198;将程序第3行改为int c1,c2;
  • 【总线】AXI4第五课时:信号描述
  • 创建单例模式的六种方式
  • 实用软件下载:CrossOver 2024最新安装包及详细安装教程
  • 开启调试模式
  • pygame 绘制一个大黑脸
  • XMLXXE实体注入
  • 艺术家电gorenje x 设计上海丨用设计诠释“生活的艺术”
  • 【刷题篇】链表
  • 若依框架,小程序访问后端,后端访问客户端,客户端读取图片返回
  • os7安装gitlab
  • 木头姐:将出于经济方面的考虑支持特朗普
  • sql注入登陆绕过