专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

python一键处理图片如何使用matplotlib进行图像处理_python

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 12:10:00       共计:3617 浏览
python一键处理图片以及如何使用matplotlib进行图像处理这样的疑问,小编汇总了相关问答给大家参考!

全文共2153字,预计学习时长4分钟或更长

用Matplotlib模拟雨

动画是呈现各种现象的有趣方式。在描述像过去几年的股票价格、过去十年的气候变化、季节性和趋势等时间序列数据时,与静态图相比,动画更能说明问题。因为,从动画中,我们可以看到特定参数是如何随时间而变化的。

上图是模拟雨的图像。此图由Matplotlib绘图库绘制而成,该绘图库常常被认为是python可视化数据包的原始数据组。Matplotlib通过50个分散点的比例和不透明度来模拟雨滴落在平面上的情景。如今,Plotly、Bokeh、Altair等一系列可视化工具均为Python中强大的可视化工具。这些库可实现最先进的动画和交互动作。但是,本文重点在于研究数据库的一个方面——动画。同时,我们也将关注实现动画的方法。

概述

Matplotlib是一个 Python 的 2D绘图库,也是Python中最受欢迎的绘图数据库。大多数人在踏上数据可视化之旅时,都是首选Matplotlib。这是因为它可简单地生成绘图,直方图、功率谱、条形图、错误图、散点图等。不仅如此,它还无缝连接了Pandas、Seaborn等数据库,甚至创建出更为复杂的可视化数据。

Matplotlib有几大优点:

· 其构造和MATLAB(矩阵实验室)类似,所以两者间易于切换

· 包含许多后端渲染

· 可以快速生成绘图

· 已存在数十年以上,因此,有大量的用户基础

但是,Matplotlib除了这些优点之外,也有许多不足之处:

· Matplotlib常常不可避免地存在冗繁的API(应用程序编程接口)

· 有时默认样式设计不如人意

· 对web和交互式图表的支持较低

· 处理大型及复杂的数据时速度常常较慢

对于进修者来说,Datacamp中有关于Matplotlib的必备知识可以帮助提高基础知识。

动画

Matplotlib的动画基类负责处理动画部分。其可提供构建动画功能的框架。有两个主要接口来实现此功能:

FuncAnimation:通过反复触发func.功能创建动画。

ArtistAnimation:利用已定义的Artist对象创建动画。

但是,在上述两种接口中,FuncAnimation更为方便。我们专注于FuncAnimation工具的研究。

要求

· 安装numpy和matplotlib模块。

· 安装符合要求的 ffmpeg 或imagemagick方可将动画以mp4或gif的形式储存。

一切准备就绪,就可以开始在JupyterNotebooks中制作第一个基本动画了。本文的访问密码可在GithubRepository中获取。

基本动画:移动的正弦波

在电脑中,利用FuncAnimation创建正弦波的基本动画。动画源代码可在Matplotlib动画教程中获取。先来看看输出代码,然后将其破译,并了解其中奥妙。

import numpy as npfrom matplotlib import pyplot as pltfrom matplotlib.animation import FuncAnimationplt.style.use('seaborn-pastel')fig = plt.figure()ax = plt.axes(xlim=(0, 4), ylim=(-2, 2))line, = ax.plot([], [], lw=3)def init(): line.set_data([], []) return line,def animate(i): x = np.linspace(0, 4, 1000) y = np.sin(2 * np.pi * (x - 0.01 * i)) line.set_data(x, y) return line,anim = FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)anim.save('sine_wave.gif', writer='imagemagick')

· 在第7行到第9行,简单地创建一个图形窗口,图中只有一个轴。然后,创建无内容的行对象,其本质上是在动画中可修改的对象。稍后用数据来填充行对象。

· 在第11行到13行,创建init函数,触发动画发生。此函数初始化数据,并限定轴范围。

· 最后,在第14行到第18行,定义动画函数,该函数以帧数(i)作为参数,并创建一个正弦波(或任意其他的动画),而其移动取决于i的值。此函数返回一个已修改的plot对象的元组,告知动画框架plot中哪些部分需要动画化。

· 在第20 行,创建实际的动画对象。Blit参数确保只重新绘制已更改的部分。

· 这是在Matplolib中创建动画的基本知识。只需对代码稍作调整,就可以创建出一些有趣的可视化。接下来看看其中一些可视化的例子吧。

一个不断扩大的线圈

同样,在GreeksforGreeks中,有一个创建图形的好例子。我们一起在animation模块的帮助下创造一个缓慢展开的活动线圈。该代码和正弦波图极为相似,只有一些小调整。

import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np plt.style.use('dark_background')fig = plt.figure() ax = plt.axes(xlim=(-50, 50), ylim=(-50, 50)) line, = ax.plot([], [], lw=2) # initialization function def init(): # creating an empty plot/frame line.set_data([], []) return line, # lists to store x and y axis points xdata, ydata = [], [] # animation function def animate(i): # t is a parameter t = 0.1*i # x, y values to be plotted x = t*np.sin(t) y = t*np.cos(t) # appending new points to x, y axes points list xdata.append(x) ydata.append(y) line.set_data(xdata, ydata) return line, # setting a title for the plot plt.title('Creating a growing coil with matplotlib!') # hiding the axis details plt.axis('off') # call the animator anim = animation.FuncAnimation(fig, animate, init_func=init, frames=500, interval=20, blit=True) # save the animation as mp4 video file anim.save('coil.gif',writer='imagemagick') 实时更新图

绘制股票数据、传感器数据等其他与时间相关的动态数据时,实时更新图就会派上用场。我们绘制一个基图,在更多的数据被输入系统后,基图就会自动更新。现在,来绘制某假定公司某月内的股价图。

#importing librariesimport matplotlib.pyplot as pltimport matplotlib.animation as animationfig = plt.figure()#creating a subplot ax1 = fig.add_subplot(1,1,1)def animate(i): data = open('stock.txt','r').read() lines = data.split('\n') xs = [] ys = [] for line in lines: x, y = line.split(',') # Delimiter is comma xs.append(float(x)) ys.append(float(y)) ax1.clear() ax1.plot(xs, ys) plt.xlabel('Date') plt.ylabel('Price') plt.title('Live graph with matplotlib')ani = animation.FuncAnimation(fig, animate, interval=1000) plt.show()

现在,打开终端并运行python文件,可以得到如下所示可自动更新的图表:

其更新的时间间隔是1000毫秒或一秒。

3D图中的动画

创建3D图形十分常见,但是如果可以将这些图形视角动画化呢?其方法是,在改变相机视图后,利用生成后的所有图像来创建动画。而在PythonGraph Gallery(Python图形库)中有个专门的部分可以完成这类工作。

首先创建一个名为volcano的文件夹,放在与记事本相同的目录中。然后,将所有会用于动画化的图形储存在该文件夹中。

# libraryfrom mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as pltimport pandas as pdimport seaborn as sns# Get the data (csv file is hosted on the web)url = 'https://python-graph-gallery.com/wp-content/uploads/volcano.csv'data = pd.read_csv(url)# Transform it to a long formatdf=data.unstack().reset_index()df.columns=["X","Y","Z"]# And transform the old column name in something numericdf['X']=pd.Categorical(df['X'])df['X']=df['X'].cat.codes# We are going to do 20 plots, for 20 different anglesfor angle in range(70,210,2):# Make the plot fig = plt.figure() ax = fig.gca(projection='3d') ax.plot_trisurf(df['Y'], df['X'], df['Z'], cmap=plt.cm.viridis, linewidth=0.2) ax.view_init(30,angle) filename='Volcano/Volcano_step'+str(angle)+'.png' plt.savefig(filename, dpi=96) plt.gca()

这样就可以在Volcano文件夹中创建多个PNG文件。接着,利用ImageMagick(一个创建、编辑、合成图片的软件)将这些PNG文件转化成动画。打开终端并导向Volcano文件夹,输入以下指令:

convert -delay 10 Volcano*.pnganimated_volcano.gif 利用Celluloid模块动画化

Celluloid是python中的一个模块,其在matplotlib中可简化创建动画的进程。这个库创建一个matplotlib图并从中创建相机。然后,重新启用该图,并在创建每帧动画后,用上述相机拍快照。最后,利用所有捕捉到的帧创建动画。

安装

pip install celluloid

下面是利用Celluloid模块的例子:

极小值

from matplotlib import pyplot as pltfrom celluloid import Camerafig = plt.figure()camera = Camera(fig)for i in range(10): plt.plot([i] * 10) camera.snap()animation = camera.animate()animation.save('celluloid_minimal.gif', writer = 'imagemagick')

子图

import numpy as npfrom matplotlib import pyplot as pltfrom celluloid import Camerafig, axes = plt.subplots(2)camera = Camera(fig)t = np.linspace(0, 2 * np.pi, 128, endpoint=False)for i in t: axes[0].plot(t, np.sin(t + i), color='blue') axes[1].plot(t, np.sin(t - i), color='blue') camera.snap()animation = camera.animate() animation.save('celluloid_subplots.gif', writer = 'imagemagick')

图例

import matplotlibfrom matplotlib import pyplot as pltfrom celluloid import Camerafig = plt.figure()camera = Camera(fig)for i in range(20): t = plt.plot(range(i, i + 5)) plt.legend(t, [f'line {i}']) camera.snap()animation = camera.animate()animation.save('celluloid_legends.gif', writer = 'imagemagick')

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

当然用Bi,虽然我很会Python、R、Javascript,但是好看的数据可视化基本是用Bi来完成的

以下是一些经典的 BI 展示:

不得不承认,BI 给人的第一印象,的确是漂亮的图表。

在实际开发中,整合数据源、清理数据等步骤往往并非由 BI 进行处理,具体分工见下图:

正如上图所示,BI 往往与数据仓库技术、olap 引擎有着直接的上下游关系。其中数据仓库主要起到统一数据源、保证数据准确度的作用;而 OLAP 引擎则帮助 BI 加速查询。它们组合在一起,最终使用户获得良好的数据分析体验。

3、BI 能做什么

BI 对企业的作用是通过两方面实现的,业务方面和技术方面。

3.1 业务方面

数据呈现我们可以通过 BI 直观、全面的展现企业日常业务的情况;无论是从整个集团的视角出发、还是从业务线或者部门的角度出发。下图即为一个标准的 数据呈现(大屏)BI。决策层可以通过该图表快速、直观的了解到目前公司的会员数量和相关的销售额——这也往往是决策层最关心的两个指标

为了保证数据更新的实时性和展示的美观性,纯粹的数据呈现往往并不支持联动、下钻、上卷等 BI 常见操作。

联动、下钻、上卷都是 BI 的专业术语,未来会逐一介绍。

异常监测专业的业务人员会有一些核心指标来监控业务,我们完全可以将其通过 BI 实行可视化监控;下图即为 某在线教育对每日课程销量的监测,运营人员通过 BI 可以迅速发觉异常变化,从而及时作出调整。智能预测在大数据的基础上,BI 也能基于简单的统计学,提供一些拟合线,来帮助业务人员进行相关分析。下图即 对某超市销售额进行预测。特定建模分析特定的建模分析通常是由精通业务的业务人员提出,通过合理的建模找出业务中可能存在的问题,将其反映出来并最终回归到业务,形成闭环决策并不断优化的一个过程。业务建模可简单,可由一个或多个图表组成,也可复杂,通过一组或多组数据图表支撑。如下图,即为对客户销售额建立的模型。通过该模型,业务人员能够快捷的了解到目前 CRM 的客户情况。帮助业务进行快速智能分析尽管 BI 能满足大部分常见需求,但资深的业务人员总会有一些突如其来的灵感。这种灵感稍纵即逝,如果等到数据部门提供数据再进行分析——可能为时已晚。如果有BI的话,业务人员可以立刻基于业务数据进行灵活分析,从而验证想法。

3.2 技术层面

减少人工处理,提升工作效率某些指标对每家公司都是非常重要的,无论该公司是否存在 BI、数据部门。例如 毛利、成本、客户。在没有 BI 的情况下,如果公司想要收集汇总这些指标信息,大多数时候都需要业务人员手动从各个系统提取数据,然后在 exc 上汇总——这个过程无疑是冗长、枯燥且毫无价值的。同时,还容易产生以下问题:如果有了 BI 和对应的数据底层,就可以自动化生成相关报表。智能报表 也属于广义上的 BI数据准确性无法保证:手工计算,就有可能出错。无法避免数据及时性无法保证:手工计算的效率由使用者决定,无法控制修改复杂:任何业务的新增、修改。都需要对复杂的 exc 公式进行修改。结果倒逼,统一指标口径成熟的公司必然有一套统一的指标口径;但在其野蛮生长中,指标、维度可能会缺乏统筹规划,从而产生一些遗留问题。举个例子:库存、销售、运营口中的"销售额"往往不是同一个"销售额"。最常见的口径不一致问题,就是时间口径不同;销售额可以依照 下单时间,支付时间,发货时间,收货时间,完成订单时间 等不同角度进行分析。在没有统一口径的情况下必然会出现误解。BI 的使用者必然包括决策层。因此,指标必然会以决策层认可的口径为主,从而消除争议。整合信息孤岛,统一分析平台数据仓库是每家公司都应有的东西,但实际上大部分公司并不完善;但分析、统计的需求并不会因为没有数仓而停滞。这个时候,BI 就可以启动汇总数据源进行统一分析的效果并不推荐长久使用 BI 作为数据汇总层。

3.3 总结:

正如上述描述,BI 更多的是从业务方出发,帮助业务解决问题。它将繁杂的数据库底层进行整理汇总,形成有效的指标维度,让 BI 使用者可以直观、清楚地看到他所关注的数据,从而帮助整个企业更好的发展。在数据的自由探索中找到原因,避免“拍脑袋”式的决策。这就是 BI 的作用,而非仅仅的数据报表呈现。

4、BI 的应用场景

BI 应用场景广泛,以下逐一枚举。

大屏大屏就是我们在 街头、展览会上常见的超大屏幕,其上大多充满了含义不明的图表。举几个例子

大屏的最大特点 就是炫。据笔者观察,其上的数据大多都是“虚荣指标”——除了好看外一无是处。但换个角度,对外宣传时,需要的就是好看。

设想一下,假设超市、医院、 会议室能有一个大屏。会吸引多少目光的注意力;增加多少回头客。

大屏的开发,有以下几点需要注意:

因为展示效果等问题,大屏相比其他 BI,缺少交互性,无法进行联动、钻取等操作。硬件成本较高——大屏很贵BI 开发成本较高——需根据硬件实际大小进行反复调试,才能保证最终结果的展示。数据 要求较高——主要是指数据的实时性;驾驶舱BI 驾驶舱是一个核心指标汇总系统,将公司的核心指标进行可视化展示,帮助决策层能通过1图直接了解到整个企业的运营情况,也可以下钻到各个细分业务中了解详细数据。

因为面向对象主要为企业高层,因此驾驶舱的数据准确度、美观度一般都是最高的。相对而言,开发成本也是最高的;

相比大屏来说,驾驶舱可以自由下钻到任意主题的详细看板中。分析性更强

驾驶舱则要注意这些:

数据准确性非常高——它不像大屏,错了也没有人知道。驾驶舱对接公司决策层,不允许有任何的数据误差。美观度——领导要看的东西,你自然要花点功夫去精心调试。看板看板(dashborad)即为最基础的 BI 展现方式。相比 大屏、驾驶舱而言,dashboard 并不那么浮夸,它的主要使用对象为一般的管理人员和运营人员。一般来说,看板也可以自由的钻取、联动。从而帮助业务人员进行更好的分析。移动端部分 BI 产品也支持移动端展示,内容一般为核心指标。

移动端开发时,需要特别注意不同手机的适配度。必要情况下,可以拿用户的实际手机款式做针对性调整。

自助分析并非所有的仪表板,都一定由数据部门来开发完成。有能力的业务人员更希望自己可以随时进行制作,而不受数据部门的约束。因此在数据部门提供数据底层的情况时,业务部门也会亲自上阵进行开发。

5、BI 的开发方式

BI 的开发,与常见的项目开发并无两样

确认需求——需求分析——指标维度梳理——源数据和数据质量确认——结果表设计——ETL 开发——可视化实现。

有几个重点需要注意:

第一步要确定 BI 的最终使用者,直接与使用者沟通会节省大量的时间。需求分析结束后,一定要与最终使用者进行文档确认,确保双方理解一致。不要轻易相信源头提供的数据,获取到数据后自己一定要初步检查,确保数据质量。demo 先行——尽早确定使用者想要的BI样式,免得反复调试浪费时间。

6、部分BI介绍

6.1 Tableau

Tableau 毫无疑问的市场王者,也是目前全球最易于上手的报表分析工具,并且具备强大的统计分析扩展功能。它能够根据用户的业务需求对报表进行迁移和开发,实现业务分析人员独立自助、简单快速、以界面拖拽式的操作方式对业务数据进行联机分析处理、即时查询等功能。

但 Tabealu 也有自己的缺点:最大的缺点就是价格过于昂贵。对于大部分公司来说,如此昂贵的 Tableau 性价比并不高。

6.2 FineReport

帆软是目前国内最大的 BI 厂商,合作厂商也相当多;产品线也遍及大屏、移动端、智能报表。可以说是最适合中国中小型企业的 BI 了。

FineReport 本是一个智能报表软件,但由于集成了大量图表,相比其他 BI 开发效率虽然稍慢,但是自由度更高。

6.3 Superset

Superset 是一款由 Airbnb 开源的“现代化的企业级 BI (商业智能) Web 应用程序”,其通过创建和分享 dashboard,为数据分析提供了轻量级的数据查询和可视化方案。

Superset 的缺点就比较多了

没有提供图表的下钻功能不支持多图表间的复杂联动处理大数据集时容易暴毙权限管理和图表管理的功能设计基本为0

但它是开源的——你无法要求一个东西又免费又好用,因此技术能力较强的公司可以考虑。

7、其他杂谈

正如开题所言, BI 并非简单的数据可视化,而是一套极度复杂的商业解决方案;

如何做到企业数据化?数据驱动业务?数据治理?

仅凭几个EXC是远远不能满足的——只有建立起良好的 BI 生态体系,企业才能真正迈入数据化。

另一方面,BI 的表象是可视化分析报表的呈现,但它的本质还是业务问题、管理问题。

如何通过 BI ,使得业务、管理能够不断优化,这才是值得我们深度思考的

需要打开文件管理器应用目录文件夹导入图片

老数据人了,用python做过挺多自己觉得有意思的东西

用python看抖音用户画像

发现城市方面,广东、江苏刷的最多

星座方面,摩羯天蝎座的人刷得最多

还用python分析过北京、广州房地产市场的房价,得出自己都买不起的结论...

代码运行几分钟就提取下22170套广州二手房数据,简单清洗后部分数据展示如下:

2020年1月至6月广州二手房量价走势

2020年1月至6月广州二手房成交TOP20楼盘

用python爬了猫眼数据,找到了2021最烂的电影

利用python制作一个词云图

一部打着开心麻花团队旗号的电影,玩起了诈骗式营销,喜获猫眼评分3.2。

猫眼3.2分,是什么概念?

这么说吧,毕志飞导演的神作——《逐梦演艺圈》即使在豆瓣上逼近2分!

但猫眼评分还有6.8分呢。

总结,以上就是关于python一键处理图片以及如何使用matplotlib进行图像处理的经验分享,卡友有疑问可以加wx或扫码加群!
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:如何才能学会代码编程编程怎么入门/程序员需要学什么_python | ·下一条:python打开图片如何利用Python来爬取网页视频呢_python

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有