Matplotlib(含代码演示)

参考说明:

1.matplotlib官方教程
2.AI算法工程师手册
3.dts手册

先体验一下简单的绘图:


import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [1, 4, 2, 3])

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

Figure的组成:

Figure:顶层级,用来容纳所有绘图元素
Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成
Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
Tick:axis的下属层级,用来处理所有和刻度有关的元素

两种绘图接口:

显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)(比如法一)
依赖pyplot自动创建figure和axes,并绘图(比如法二)

matplotlib的三层api:

类比人的画图过程,matplotlib有三个层次的API:
matplotlib.backend_bases.FigureCanvas 代表了绘图区,所有的图像都是在绘图区完成的(准备一块画布或画纸)
matplotlib.backend_bases.Renderer 代表了渲染器,可以近似理解为画笔,控制如何在 FigureCanvas 上画图(准备好颜料、画笔等制图工具)
matplotlib.artist.Artist 代表了具体的图表组件,即调用了Renderer的接口在Canvas上作图。

Artist的类型:

primitive是基本要素,它包含一些我们要在绘图区作图用到的标准图形对象,如曲线Line2D,文字text,矩形Rectangle,图像image等。
container是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes和坐标轴Axis。

primitives:

先区分一下primitives和container
primitives是基本要素,它包含一些我们要在绘图区作图用到的标准图形对象,如曲线Line2D,文本text,矩形Rectangle,图像image等。
container是容器,即用来装基本要素的地方,包括图形figure、坐标系Axes和坐标轴Axis。

2DLines:

曲线的绘制,主要是通过类 matplotlib.lines.Line2D 来完成的,它的基类: matplotlib.artist.Artist

其中常用的的参数有:

xdata:需要绘制的line中点的在x轴上的取值,若忽略,则默认为range(1,len(ydata)+1)
ydata:需要绘制的line中点的在y轴上的取值
linewidth:线条的宽度
linestyle:线型
color:线条的颜色
marker:点的标记,详细可参考markers API
markersize:标记的size

举个列子:

Matplotlib(含代码演示)

; patches

matplotlib.patches.Patch类是二维图形类。它的基类是matplotlib.artist.Artist(这里只说常用的)

Rectangle-矩形

Rectangle矩形类在官网中的定义是: 通过锚点xy及其宽度和高度生成。 Rectangle本身的主要比较简单,即xy控制锚点,width和height分别控制宽和高。

1.hist-直方图(参数+代码)

参数:
x: 数据集,最终的直方图将对数据集进行统计
bins: 统计的区间分布
range: tuple, 显示的区间,range在没有给出bins时生效
density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
histtype: 可选{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
align: 可选{‘left’, ‘mid’, ‘right’}之一,默认为’mid’,控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
log: bool,默认False,即y坐标轴是否选择指数刻度
stacked: bool,默认为False,是否为堆积状图
代码:

import matplotlib.pyplot as plt
import numpy as np
x=np.random.randint(0,100,100)
bins=np.arange(0,101,10)
plt.hist(x,bins,color='fuchsia',alpha=0.5)
plt.xlabel('scores')
plt.ylabel('count')
plt.xlim(0,100)
2.bar-柱状图

参数:
left:x轴的位置序列,一般采用range函数产生一个序列,但是有时候可以是字符串
height:y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;
alpha:透明度,值越小越透明
width:为柱形图的宽度,一般这是为0.8即可;
color或facecolor:柱形图填充的颜色;
edgecolor:图形边缘颜色
label:解释每个图像代表的含义,这个参数是为legend()函数做铺垫的,表示该次bar的标签
代码:

import matplotlib as mpl
y = range(1,17)
plt.bar(np.arange(16), y, alpha=0.5, width=0.5, color='yellow', edgecolor='red', label='The First Bar', lw=3)

Wedge-契形

matplotlib.patches.Polygon类是多边形类。其基类是matplotlib.patches.Patch。一个Wedge-契形 是以坐标x,y为中心,半径为r,从θ1扫到θ2(单位是度)。
主要参数:
x:契型的形状,一维数组。
explode:如果不是等于None,则是一个len(x)数组,它指定用于偏移每个楔形块的半径的分数。
labels:用于指定每个契型块的标记,取值是列表或为None。
colors:饼图循环使用的颜色序列。如果取值为None,将使用当前活动循环中的颜色。
startangle:饼状图开始的绘制的角度。
饼状图代码:

import matplotlib.pyplot as plt
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.8, 0, 0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal')
plt.show()

errorbar绘制误差折线图:

pyplot里有个专门绘制误差线的功能,通过errorbar类实现,这个可以很好的和机器学习相结合

其中最主要的参数是前几个:

x:需要绘制的line中点的在x轴上的取值
y:需要绘制的line中点的在y轴上的取值
yerr:指定y轴水平的误差
xerr:指定x轴水平的误差
ecolor:指定error bar的颜色
elinewidth:指定error bar的线条宽度

比如sin函数每次误差加0.02
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
x = np.arange(0.0, 1.0, 0.01)
y = np.sin(2*np.pi*t)
yerr = np.arange(0.0, 2.0, 0.02)
plt.errorbar(x, y , yerr=yerr, label='both limits (default)')

matplotlib标准用法:

1.创建一个Figure实例
2.使用Figure实例创建一个或者多个Axes或Subplot实例
3.使用Axes实例的辅助方法来创建primitive或者container
以sin函数为例子:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

ax = fig.add_subplot(2, 1, 1)

t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax.plot(t, s, color='blue', lw=2)

子图

法一:plt.subplots (均匀)

简介:

plt.subplots 的返回元素分别是画布和子图构成的列表,figsize 参数可以指定整个画布的大小,sharex 和 sharey 分别表示是否共享横轴和纵轴刻度,tight_layout 函数可以调整子图的相对大小使字符不会重叠

简单实现:

fig, axs = plt.subplots(2, 5, figsize=(10, 4), sharex=True, sharey=True)
fig.suptitle('样例1', size=20)
for i in range(2):
    for j in range(5):
        axs[i][j].scatter(np.random.randn(10), np.random.randn(10))
        axs[i][j].set_title('第%d行,第%d列'%(i+1,j+1))
        axs[i][j].set_xlim(-5,5)
        axs[i][j].set_ylim(-5,5)
        if i==1: axs[i][j].set_xlabel('横坐标')
        if j==0: axs[i][j].set_ylabel('纵坐标')
fig.tight_layout()

法二:GridSpec(非均匀)

简介:

所谓非均匀包含两层含义,第一是指图的比例大小不同但没有跨行或跨列,第二是指图为跨列或跨行状态。利用 add_gridspec 可以指定相对宽度比例 width_ratios 和相对高度比例参数 height_ratios。

matplotlib的绘图样式(style)

内置风格:

查看方法:

print(plt.style.available)

比如我想使用内置的ggplot风格,代码如下:

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

plt.style.use('ggplot')
plt.plot([1,2,3,4],[2,3,4,5])

自定义风格:
在任意路径下创建一个后缀名为mplstyle的样式清单,编辑文件添加以下样式内容

axes.titlesize : XX
axes.labelsize : XX
lines.linewidth : XX
lines.markersize : XX
xtick.labelsize : XX
ytick.labelsize : XX

XX为我们要定义的数值
plt.style.use(‘l路径名’)即可调用

Original: https://blog.csdn.net/GodGump/article/details/124562315
Author: GodGump
Title: Matplotlib(含代码演示)

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

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

(0)

大家都在看

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