我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python绘图demo实现流程介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python绘图demo实现流程介绍

前言

冒个泡泡,好久没有冒泡泡了,那么今天的话就浅浅水一下博文吧。任务是这样的,将Excel当中的数据,把它放到咱们的matlpolitlib里面去画个图。

数据是这样子的:

这里面有很多sheet,然后还有对应的点的坐标。要最终实现的效果就是:

并且我们还需要符合规范:

这样的话图片才不会失真。BOSS不催,小爷不写(狗头)

实现

那么这里的话就是咱们的实现了这个Excel的读取,然后是绘制图片。

读取数据

首先是读取数据,这部分相当简单,就在初始化做了。

    def __init__(self,file_path,pic_name=None,
                 legend_names=None,padx=0,pady=1,
                 save_path_pre="./pic"
                 ):
        """
        默认存储的图片为4K,600dpi
        :param file_path:
        :param pic_name:
        :param legend_names:
        :param padx:
        :param pady:
        :param save_path_pre:
        """
        self.xl_file = xlrd.open_workbook(file_path)
        self.sheet_names = self.xl_file.sheet_names()
        self.legend_names = None
        self.setTrans = False
        self.setFig = False
        self.join = False
        self.padx = padx
        self.pady = pady
        self.save_path_pre = save_path_pre
        if(pic_name):
            self.pic_name = pic_name
        else:
            self.pic_name = self.sheet_names
        if(legend_names and padx==None):
            self.legend_names=legend_names
        elif(legend_names==None):
            sheet1 = self.xl_file.sheets()[0]
            sheet1_cols = sheet1.col_values(padx)
            self.legend_names = sheet1_cols[pady:]
        elif(legend_names!=None):
            self.legend_names = legend_names
        else:
            raise Exception("请检查格式,或者参数设置")

这里我解释一下这几个参数的含义

    默认存储的图片为4K,600dpi
    :param file_path:
    :param pic_name:
    :param legend_names: 图例的名字
    :param padx: 数据是从哪一个列开始的
    :param pady: 哪一个行开始的
    :param save_path_pre:
    """

例如刚刚的例子,是在第1行第1列开始的,下标0开始。

如果没有指定那个图例说明的话,那么代码就会直接取pady那一列的数据作为图例。

绘图

这个绘图的话非常简单,就是直接使用那个plt,读取好数据就好了。

    def creatPic(self,legend_loc='upper right',multiple=40,
                 padding=10000,width=4096,height=3112
                 ):
        """
        :param legend_loc: 图例的说明
        :return:
        """
        if(self.setFig and self.setFig):
            for sheet_index in range(len(self.xl_file.sheet_names())):
                sheet = self.xl_file.sheets()[sheet_index]
                self.plt = self.creatFigure()
                #按照行进行读取
                for row in range(self.pady,len(self.legend_names)+self.pady):
                    row_data_y = [self.transform(float(data),padding) for data in sheet.row_values(row)[self.padx+1:]]
                    row_data_x = [x*multiple for x in range(len(row_data_y))]
                    label_name = self.legend_names[row-self.pady]
                    self.plt.plot(row_data_x,row_data_y,label=label_name)
                plt.legend()
                save_path = self.save_path_pre+"./"+self.pic_name[sheet_index]+".jpg"
                self.plt.savefig(save_path,
                                 dpi=600, bbox_inches='tight'
                                 )
                self.changeImgSiz(save_path)
                self.plt.pause(0.05)
        else:
            raise Exception("请先设置数据转换方式以及绘图")

这里的话还有一点就是有一个修改图片尺寸的代码,以为画布尺寸和那个实际图片尺寸还是有点区别的。这个看着改吧,当然你可以选择保存为png,但是这样的话,x,y轴的说明可能没有了。那么重新resize的话,dpi会变成96,所以看自己吧

完整实现

import matplotlib.pyplot as plt  # 为方便简介为plt
import xlrd
import math
from PIL import Image
class Draw(object):
    def __init__(self,file_path,pic_name=None,
                 legend_names=None,padx=0,pady=1,
                 save_path_pre="./pic"
                 ):
        """
        默认存储的图片为4K,600dpi
        :param file_path:
        :param pic_name:
        :param legend_names:
        :param padx:
        :param pady:
        :param save_path_pre:
        """
        self.xl_file = xlrd.open_workbook(file_path)
        self.sheet_names = self.xl_file.sheet_names()
        self.legend_names = None
        self.setTrans = False
        self.setFig = False
        self.join = False
        self.padx = padx
        self.pady = pady
        self.save_path_pre = save_path_pre
        if(pic_name):
            self.pic_name = pic_name
        else:
            self.pic_name = self.sheet_names
        if(legend_names and padx==None):
            self.legend_names=legend_names
        elif(legend_names==None):
            sheet1 = self.xl_file.sheets()[0]
            sheet1_cols = sheet1.col_values(padx)
            self.legend_names = sheet1_cols[pady:]
        elif(legend_names!=None):
            self.legend_names = legend_names
        else:
            raise Exception("请检查格式,或者参数设置")
    def setTransform(self,joinPoint=None):
        if(joinPoint):
            self.transform = joinPoint
            self.join = True
        else:
            self.transform_core = math.log
        self.setTrans = True
    def transform(self,x,pading=10000):
        if(self.join):
            return self.transform_core(x)
        else:
            return self.transform_core(x+pading)
    def setFigure(self,style='seaborn-whitegrid',fig=None,
                  xlabel='x',ylabel='log(y)'):
        self.fig = fig
        self.style = style
        self.xlabel = xlabel
        self.ylabel = ylabel
        self.setFig = True
    def changeImgSiz(self,path,width=4096,height=4096):
        img_switch = Image.open(path)
        img_deal = img_switch.resize((width,height), Image.ANTIALIAS)
        img_deal.save(path)
    def creatFigure(self):
        self.plt = plt
        if(self.fig):
            self.plt = self.fig()
        else:
            self.plt.rcParams['font.sans-serif'] = ['SimHei']
            self.plt.rcParams['axes.unicode_minus'] = False
            self.plt.figure(figsize=(8, 8))
            self.plt.style.use(self.style)
            self.plt.xlabel(self.xlabel)
            self.plt.ylabel(self.ylabel)
        return self.plt
    def creatPic(self,legend_loc='upper right',multiple=40,
                 padding=10000,width=4096,height=3112
                 ):
        """
        :param legend_loc: 图例的说明
        :return:
        """
        if(self.setFig and self.setFig):
            for sheet_index in range(len(self.xl_file.sheet_names())):
                sheet = self.xl_file.sheets()[sheet_index]
                self.plt = self.creatFigure()
                #按照行进行读取
                for row in range(self.pady,len(self.legend_names)+self.pady):
                    row_data_y = [self.transform(float(data),padding) for data in sheet.row_values(row)[self.padx+1:]]
                    row_data_x = [x*multiple for x in range(len(row_data_y))]
                    label_name = self.legend_names[row-self.pady]
                    self.plt.plot(row_data_x,row_data_y,label=label_name)
                plt.legend()
                save_path = self.save_path_pre+"./"+self.pic_name[sheet_index]+".jpg"
                self.plt.savefig(save_path,
                                 dpi=600, bbox_inches='tight'
                                 )
                self.changeImgSiz(save_path)
                self.plt.pause(0.05)
        else:
            raise Exception("请先设置数据转换方式以及绘图")
if __name__ == '__main__':
    file_path = ''
    save_path_pre = ''
    legend_names = ['','','']
    draw = Draw(file_path,legend_names=legend_names,save_path_pre=save_path_pre)
    draw.setTransform()
    draw.setFigure()
    draw.creatPic()
    

到此这篇关于python绘图demo实现流程介绍的文章就介绍到这了,更多相关python绘图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python绘图demo实现流程介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python绘图demo实现流程介绍

这篇文章主要介绍了python绘图demo实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-11-13

Reactroutercacheroute实现缓存页面流程介绍

react-router自身没有路由缓存的特性,在5.x版本之前,我们可以基于react-router-cache-route来实现路由缓存功能。但是react-router6.x在实现上做了比较大的变化,react-router-cache-route没有提供相应的支持
2023-01-10

JavaScript自定义Webpack配置实现流程介绍

本系列主要整理前端面试中需要掌握的知识点。本节介绍webpack如何优化前端性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

JavaJDBCAPI介绍与实现数据库连接池流程

JDBC是指Java数据库连接,是一种标准Java应用编程接口(JAVAAPI),用来连接Java编程语言和广泛的数据库。从根本上来说,JDBC是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,本篇文章我们来了解JDBCAPI及数据库连接池
2022-12-08

SpringCloud使用Feign实现远程调用流程详细介绍

OpenFeign源于Netflix的Feign,是http通信的客户端。屏蔽了网络通信的细节,直接面向接口的方式开发,让开发者感知不到网络通信细节。所有远程调用,都像调用本地方法一样完成
2023-02-15

Android编程实现手绘及保存为图片的方法(附demo源码下载)

本文实例讲述了Android编程实现手绘及保存为图片的方法。分享给大家供大家参考,具体如下: 运行效果图预览:应 yzuo_08 要求做了此Demo,跟以前那个手写板Demo不同的是可以将画布的内容保存为图片。 附上关键代码: MainVi
2022-06-06

python多线程怎么实现动态图绘制

今天小编给大家分享一下python多线程怎么实现动态图绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、背景有些情况下,
2023-06-30

一款在线制图工具介绍:如何在线免费绘制UML,云架构,ER模型,平面图,流程图等-

介绍一下通过在线免费制图网站 Freedgo Design 绘制各类图形的方法。 什么是 Freedgo Design?Freedgo Design 是一in款在线绘制专业图形的网站。Freedgo Design可以绘制各种类型的图形,针
2023-06-05

Vueelectron前端开启局域网接口实现流程详细介绍

用electron写了一个自己用的小软件,无后端,纯本地的数据。最近想着开发一个手机端app,将PC端的数据进行同步。为了这小小的功能单独写个后端又麻烦。干脆前后端不分离哈哈,直接在前端软件中开启接口
2022-11-13

Vue支持搜索与筛选的用户列表实现流程介绍

这篇文章主要介绍了Vue支持搜索与筛选的用户列表实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录