python轻松实现数据可视化的法宝——matplotlib库

目录

系列文章目录

一. matplotlib架构介绍

二. pyplot模块的应用(附代码)

三. matplotlib 的多种图形表示(附代码)

四. 总结

系列文章目录

第一章:python数据分析的钥匙——pandas库

第二章:python轻松实现数据可视化的法宝——matplotlib库

一. matplotlib架构介绍

在笔者看来,matplotlib的主要任务之一,就是提供一套表示和操作图形对象(主要对象)以及它的内部对象的函数和工具。而且matplotlib不仅可以处理图形,还提供事件处理工具,具有为图形添加动画效果的能力,故而。matplotlib就能生成以键盘按键或鼠标移动触发的事件的交互性图表。

从逻辑上来讲,matplotlib的整体架构为3层(如下图)。各层之间单向通信,即每一层只能与它的下一层通信,而下层无法与上层通信。

python轻松实现数据可视化的法宝——matplotlib库

1)Bankend层

如上图所示,matplotlib架构的最下面一层为Bankend层,而matplotlib API即位于该层,这些API是用来在底层实现图形元素的一个个类。

  • FingureCanvas对象实现了绘图区域这一概念;
  • Renderer对象在FigureCanvas上绘图;
  • Event对象处理用户输入(键盘和鼠标事件);

2)Artist层

中间层为Artist层。图形中所有能看到的元素都属于Artist对象,即标题、轴标签、刻度等组成图形的所有元素都是Artist对象的实例。在这里为大家介绍三个主要的Artist对象,通常所有图形实现的Artist层都不开它们:

  • Figure对象在Artist层的最上面,对应整个图形表示,通常可包含多条轴(Axes);
  • Axes对象通常表示图形或图表是对什么内容进行作图的。每次Axes对象只属于一个Figure对象,由两个(三维就有三个)Artist Axis对象组成。题目、x标签和y标签等对象都属于Axes这个composite artist类型的对象;
  • Axis对象负责展示在Axes对象上面的数值,定义数值范围,管理刻度(轴上的标记)和刻度值标签(代表每个刻度大小的文本标签)。刻度的位置用Locator对象调整,刻度标签的格式用Formatter对象调整;

3)Scripting层(pyplot)

Artist类和相关函数(matplotlib API)非常适合开发人员,尤其适合Web应用服务器或GUI开发者使用。但是对于计算,尤其是数据分析和可视化,Scripting层最适合,因为该层包含pyplot接口。

二. pyplot模块的应用(附代码)

pyplot模块由一组命令式函数组成,因而matplotlib的使用方法跟MATLAB极其相似,可通过poplot函数操作或改动Figure对象;而且,pyplot还具有 状态性特性,能追踪当前图案和绘图区域的状态。调用函时,函数只对当前图形起作用,下面通过代码生成一个简单的交互性图表辅助大家进行理解:

import matplotlib.pyplot as plt

plt.plot([1,2,3,4])
plt.show()

结果如下所示,生成的绘图窗口上面是工具栏,下面是绘制的图像,跟用MATLAB作图效果相同:

python轻松实现数据可视化的法宝——matplotlib库

1)plt.plot()方法

如果只是将一个数字或数组传递给plt.plot()函数,matplotlib就会假定传入的是图表的y值,于是将其和一个序列的x值对应起来,x的取值就以此是0,1,2,3······;若是输入两个数组,则一一对应进行描点输出;

plt.plot()方法的默认设置:

  • 轴长与输出数据范围一致;
  • 无标题金额轴标签;
  • 无图例;
  • 用蓝色线条连接个数据点;
import matplotlib.pyplot as plt
import numpy as np

xpoints = np.array([1, 2, 6, 8])
ypoints = np.array([3, 8, 1, 10])
ypoints1 = np.array([4, 9, 2, 11])
plt.plot(xpoints, ypoints, xpoints, ypoints1)
plt.show()

结果如下所示,可以看出 plot()可以同时输入输出两组x,y组数且两组组数数值也都一一对应:

python轻松实现数据可视化的法宝——matplotlib库

绘图过程我们还可以给坐标自定义一些不一样的标记,就可以使用 plot() 方法的 marker 参数来定义,以下实例定义了实心圆标记:

import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([1,3,4,5,8,9,6,1,3,4,5,2,4])

plt.plot(ypoints, marker = 'o')
plt.show()

结果如下所示:

python轻松实现数据可视化的法宝——matplotlib库

marker,即 绘图点的标记可以定义的主要符号如下:

python轻松实现数据可视化的法宝——matplotlib库

既然绘图点可以进行设置,那当然的,绘图线也可以的:

线的类型可以使用 linestyle 参数来定义,简写为 ls:

python轻松实现数据可视化的法宝——matplotlib库

线的颜色可以使用 color 参数来定义,简写为 c:

python轻松实现数据可视化的法宝——matplotlib库

代码展现如下所示:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,10)
y =  2*x + 3

plt.plot(x, y, color = 'r', linestyle = 'dotted')#coler 可以简写为 c ,linestyle 可以用简写 ls

plt.show()

python轻松实现数据可视化的法宝——matplotlib库

2)plt.axis()方法:可以用列表[xmin, xmax, ymin, ymax]定义好x轴和y轴的取值范围,把该列表作为参数传给axis()函数;

3)plt.title()方法:可以给图表增加标题,但默认为英文,我们可以自行下载的字体,通过设置fontproperties进行中文显示,通过fontsize 设置字体大小;

4)plt.xlabel()方法:设置 x 轴的标签,与标题的默认一样;

5)plt.ylabel()方法:设置 y 轴的标签,与标题的默认一样;

代码实现如下:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,10)
y =  2*x + 3

plt.axis([0, 11, 1, 25])
plt.title("title")
plt.xlabel("xlabel")
plt.ylabel("ylabel")
plt.plot(x, y)

plt.show()

python轻松实现数据可视化的法宝——matplotlib库

6)plt.text()方法:text(x, y, s, fontdict=None, **kwargs),x,y为文本在图形的位置,s为要添加的字符串(默认为英文,要添加中文需自己导入语言包),fontdict为文本要使用的字体,kwargs为key word关键字,代码展示如下:

import matplotlib.pyplot as plt
import numpy as np

plt.axis([0, 5, 0, 25])
plt.title("title", fontsize=20, fontname = 'Times New Roman')
plt.xlabel("xlabel", color='gray')
plt.ylabel("ylabel", color='gray')
plt.text(1, 1.5,'First')
plt.text(2, 4.5,'Second')
plt.text(3, 9.5,'Third')
plt.text(4, 16.5,'Fourth')
plt.text(1.1, 12, r'$y=x^2$', fontsize=20, bbox={'facecolor':'yellow', 'alpha':0.2})
plt.plot([1,2,3,4], [1,4,9,16], 'ro')

plt.show()

python轻松实现数据可视化的法宝——matplotlib库

7)plt.grid()方法:grid(b=None, which=’major’, axis=’both’, ), axis可设置显示哪个方向的网格线默认为全取,设’x’ 或 ‘y’,分别表示两个方向,x 轴方向或 y 轴方向。

#在上面代码添加了这一行
plt.grid()

python轻松实现数据可视化的法宝——matplotlib库

8)plt.legend()方法:legend(loc)可以通过loc来设置参数的文本便签的位置:

#在上面代码基础上再添加了这一行
plt.legend(['First series'], loc= 'best')
#loc= 'best'就是在右上角,也可以设置成数字

python轻松实现数据可视化的法宝——matplotlib库

9)plt.savefig()方法:可以通过savefig直接将生成的图表保存为本地的图片代码如下:

import matplotlib.pyplot as plt
import numpy as np

plt.axis([0, 5, 0, 25])
plt.title("title", fontsize=20, fontname = 'Times New Roman')
plt.xlabel("xlabel", color='gray')
plt.ylabel("ylabel", color='gray')
plt.text(1, 1.5,'First')
plt.text(2, 4.5,'Second')
plt.text(3, 9.5,'Third')
plt.text(4, 16.5,'Fourth')
plt.text(1.1, 12, r'$y=x^2$', fontsize=20, bbox={'facecolor':'yellow', 'alpha':0.2})
plt.grid()
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.legend(['First series'], loc= 'best')

plt.savefig('pyplot.png')

三. matplotlib 的多种图形表示(附代码)

1)subplot() 方法:subplot(nrows, ncols, index, **kwargs),如设置 numRows = 2,numCols = 2,就是将图表绘制成 2×2 的图片区域, index就是第几个图,具体代码如下:

import matplotlib.pyplot as plt
import numpy as np

#plot 1:
x = np.array([0, 6])
y = np.array([0, 100])

plt.subplot(2, 2, 1)
plt.plot(x,y)
plt.title("plot 1")

#plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])

plt.subplot(2, 2, 2)
plt.plot(x,y)
plt.title("plot 2")

#plot 3:
x = np.array([1, 2, 3, 4])
y = np.array([3, 5, 7, 9])

plt.subplot(2, 2, 3)
plt.plot(x,y)
plt.title("plot 3")

#plot 4:
x = np.array([1, 2, 3, 4])
y = np.array([4, 5, 6, 7])

plt.subplot(2, 2, 4)
plt.plot(x,y)
plt.title("plot 4")

plt.suptitle("RUNOOB subplot Test")
plt.show()

python轻松实现数据可视化的法宝——matplotlib库

2)plt.subplots()方法:subplots(nrows=1, ncols=1, , sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, fig_kw)与 subplot() 函数*相比主要多了共享的概念:

import matplotlib.pyplot as plt
import numpy as np

创建一些测试数据
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)

创建一个画像和子图
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')

创建两个子图
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)

plt.show()

python轻松实现数据可视化的法宝——matplotlib库

3)plt.scatter() 方法:scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, , edgecolors=None, plotnonfinite=False, data=None, *kwargs)主要就是x,y为散点所在位置,具体代码如下:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'hotpink')

x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')

x = np.array([1, 4, 9, 16, 7, 11, 23, 18])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,60,90])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])
plt.scatter(x, y, c=colors, s=sizes)

plt.show()

python轻松实现数据可视化的法宝——matplotlib库

4)plt.colorbar()方法:在旁边显示颜色条,设置颜色条需要使用 cmap 参数,默认值为 ‘viridis’,之后颜色值设置为 0 到 100 的数组,只需添加:

plt.colorbar()

python轻松实现数据可视化的法宝——matplotlib库

5)pyplot.bar()方法:bar(x, height, width=0.8, bottom=None, , align=’center’, data=None, kwargs)这是一般柱状图的使用方法,而垂直方向的柱形图可以使用 barh()*方法来设置,下面我们使用bar()方法:

import matplotlib.pyplot as plt
import numpy as np

x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])

plt.bar(x, y, width = [0.1, 0.2, 0.3, 0.4], color = ["#4CAF50","red","hotpink","#556B2F"])
plt.show()

python轻松实现数据可视化的法宝——matplotlib库

6)pyplot.pie()方法:pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source],在下面我们用简单的实例实用 pie() 来创建一个柱形图:

import matplotlib.pyplot as plt
import numpy as np

y = np.array([35, 25, 25, 15])

plt.pie(y,
        labels=['A','B','C','D'], # 设置饼图标签
        colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
        explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远
        autopct='%.2f%%', # 格式化输出百分比
       )
plt.title("RUNOOB Pie Test")
plt.show()

python轻松实现数据可视化的法宝——matplotlib库

四. 总结

matplotlib库的图形应用还有多种形式,比如和pandas库联合分析数据的方式等各种实际应用,今天本文将matplotlib库最常用的部分展示给大家,希望对大家有帮助~~

欢迎大家留言一起讨论问题~~~

Original: https://blog.csdn.net/weixin_53919192/article/details/124049125
Author: Hulake_
Title: python轻松实现数据可视化的法宝——matplotlib库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/765172/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球