python绘图小dome
文章目录
- 前言
- 实现
- 读取数据
- 绘图
- 完整实现
- 总结
前言
冒个泡泡,好久没有冒泡泡了,那么今天的话就浅浅水一下博文吧。任务是这样的,将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 = Noneself.setTrans = Falseself.setFig = Falseself.join = Falseself.padx = padxself.pady = padyself.save_path_pre = save_path_preif(pic_name):self.pic_name = pic_nameelse:self.pic_name = self.sheet_namesif(legend_names and padx==None):self.legend_names=legend_nameselif(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_nameselse: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 Imageclass 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 = Noneself.setTrans = Falseself.setFig = Falseself.join = Falseself.padx = padxself.pady = padyself.save_path_pre = save_path_preif(pic_name):self.pic_name = pic_nameelse:self.pic_name = self.sheet_namesif(legend_names and padx==None):self.legend_names=legend_nameselif(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_nameselse:raise Exception("请检查格式,或者参数设置")def setTransform(self,joinPoint=None):if(joinPoint):self.transform = joinPointself.join = Trueelse:self.transform_core = math.logself.setTrans = Truedef 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 = figself.style = styleself.xlabel = xlabelself.ylabel = ylabelself.setFig = Truedef 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 = pltif(self.fig):self.plt = self.fig()else:self.plt.rcParams['font.sans-serif'] = ['SimHei']self.plt.rcParams['axes.unicode_minus'] = Falseself.plt.figure(figsize=(8, 8))self.plt.style.use(self.style)self.plt.xlabel(self.xlabel)self.plt.ylabel(self.ylabel)return self.pltdef 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()
总结
ok,水完了,快结束了
python绘图小dome相关推荐
- 【Python绘图小课堂】词云韦恩图(上篇-分词)
数据说明 本案例数据为电影<白蛇传·情>豆瓣短评数据: 其中,评分有:推荐.力荐.还行.较差.很差 五种,我们将推荐与力荐的评论归为"好评",并赋值为1,将其余三种评论 ...
- Python绘制高斯分布(正态分布)图像,附python绘图技巧
高斯分布也称为正态分布,其概率密度函数如下: 使用Python绘制正态分布曲线,借助matplotlib绘图工具. 代码如下: # plot Gaussian Function # 注:正态分布也叫高 ...
- python鼠标绘图_python 基于opencv 实现一个鼠标绘图小程序
需求 在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换.左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图. 实现思想 用鼠标画图:需要定义鼠标的回调函数mouse_event 画圆 ...
- python绘图设置标题出现乱码_解决python2 绘图title,xlabel,ylabel出现中文乱码的问题...
Python绘图如何显示中文标题一个懂得以幽默态度面对自己缺点并将缺点变成自己专属的特色-这才是真正乐观勇敢的人. 采用matplotlib作图时默认设置下是无法显示中文的,例如编写如下python脚 ...
- R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)
写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...
- python迷宫小游戏大全_Python迷宫小游戏源代码、源程序
Python迷宫小游戏源程序包括两个文件maze.py和mazeGenerator.py,mazeGenerator.py实现迷宫地图的生成,程序运行截图: mazeGenerator.py impo ...
- python创意小作品-python turtle库的几个小demo
一.先上图 一个同切圆和五角星 上代码 import turtle #同切圆 turtle.pensize(2) turtle.circle(10) turtle.circle(40) turtle. ...
- python画图代码-Python实战小程序利用matplotlib模块画图代码分享
Python中的数据可视化 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件. 实战小程序: ...
- 用python画图代码-Python实战小程序利用matplotlib模块画图代码分享
Python中的数据可视化 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件. 实战小程序: ...
- 用python画小仓鼠代码,用python画小仓鼠教程
怎么用python绘图 你可以使用numpy和matplotlab这两个库来实现的你功能. 你的图可以参考:import matplotlibfrom numpy.random import rand ...
最新文章
- Intel RealSense 数码相机和摄像机的ISO是什么意思?
- Python性能优化的20条建议
- 关于mysql 优化的日常记录
- 查看mysql语句运行时间的2种方法
- 验证请求的时间有效性和接口数据防盗链
- 使用线程——创建线程
- ubuntu16.04下安装nodejs
- (15)VHDL测试激励编写(复位)
- C语言 mallocfree
- Win 10 没有 Hyper-V 解决方案
- 遍历树,找出所有叶子路径
- html video拖放设置,HTML5新特性以及video和audio标签和拖放笔记
- 整合SSH 遇到错误之一
- Java进阶之路——从初级程序员到架构师,从小工到专家
- 电商商家如何利用商品信息制定价格策略?
- android 自定义控件github,GitHub - swordman20/AndroidDIYWidget: Android组合自定义控件
- fi sap 凭证冲销 稅_SAP FI 系列 (019) - 会计凭证的冲销和反记账
- wince 触摸屏 学习
- 1.2 网络爬虫分类
- SLCP验厂辅导,企业在认证之后便可以将经验证过后的数据信息分享给其它各托管平台