首页 > 其他分享 >matplotlib绘图详解

matplotlib绘图详解

时间:2022-12-18 13:23:17浏览次数:68  
标签:plot None plt pyplot matplotlib 详解 绘图 np

目录

matplotlib绘图详解

一、 基础准备

1、 matplotlib简介

​ Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。 Matplotlib可用于Python脚本,Python和IPython (opens new window)Shell、Jupyter (opens new window)笔记本,Web应用程序服务器和四个图形用户界面工具包。

​ Matplotlib 尝试使容易的事情变得更容易,使困难的事情变得可能。 您只需几行代码就可以生成图表、直方图、功率谱、条形图、误差图、散点图等。 更多的示例,请参见基础绘图例子示例陈列馆

​ 为了简单绘图,该 pyplot 模块提供了类似于MATLAB的界面,尤其是与IPython结合使用时。 对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组功能来完全控制线型,字体属性,轴属性等。

2、 环境准备

2.1 安装

pip install matplotlib   # 使用pip包管理器安装
poetry add matplotlib  # 使用poetry安装

2.2 参考文档

中文文档:https://matplotlib.org.cn/

英文文档:https://matplotlib.org/

3、 图表结构

一些绘图基础知识

  • 画板figure,画纸Sublpot画质,可多图绘画
  • 画纸上最上方是标题title,用来给图形起名字
  • 坐标轴Axis,横轴叫x坐标轴label,纵轴叫y坐标轴ylabel
  • 图例Legend 代表图形里的内容
  • 网格Grid,图形中的虚线,True显示网格
  • Markers:表示点的形状。

4、 常用图表

基本的视觉元素有三种:点、线、柱状。

  • 对于数值类型,用点来进行可视化。例如想要知道学生为某科课程花费的时间和考试成绩两者之间的关系,可以把每个学生的数据绘制一个点,绘制出散点图 scatter plot,可以查看两者之间的相关性。
  • 对于时间序列的数据类型,用线条来进行可视化。用线条将相关的数据点连接在一起,帮助我们观察随着时间的变化数据的变化趋势,这样的图叫做折线图line plot
  • 对于分类数据,需要查看数据是如何在各个类别之间分布的,可以使用柱状图 bar plot
  • 用来表示第三个维度时,可以使用颜色。一般很难在二维平面上表示三维数据,这时可以使用颜色视觉元素。最典型是热图heatmap,通过用渐进颜色显示用户热衷的区域或所在地理区域的图。

二、绘图步骤

1、 常用图表

1.1 散点图

语法:

matplotlib.pyplot.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:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。

s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。

c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。

marker:点的样式,默认小圆圈 'o'。

cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。

norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

alpha::透明度设置,0-1 之间,默认 None,即不透明。

linewidths::标记点的长度。

edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

**kwargs::其他参数。

使用示例:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022

@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np
import time
np.random.seed(np.int64(time.time()))  # 设置随机种子

N = 50

x = np.random.rand(N)
y = np.random.rand(N)
color = np.random.rand(x.size)  # 随机颜色

plt.title("Draw Scatter") # 设置标题

plt.scatter(
    x, 
    y,
    c=color,  # 设置点的颜色
    s=x * 100,  # 设置每一个点的大小
    cmap="viridis",  # 设置颜色条
)  
plt.colorbar()  # 显示颜色条
plt.show()  # 显示图片

其余的参数可以自行去尝试.,更多参数可以在官方文档查看,链接:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html

1.2 柱状图

语法:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

参数说明:

x:浮点型数组,柱形图的 x 轴数据。

height:浮点型数组,柱形图的高度。

width:浮点型数组,柱形图的宽度。

bottom:浮点型数组,底座的 y 坐标,默认 0。

align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。

**kwargs::其他参数。

示例:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022

@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np
import time
np.random.seed(np.int64(time.time()))  # 修改随机种子

width = 0.5
N = 10
x = np.arange(N)
y = np.random.rand(N)


plt.bar(x, y, width=width)
plt.show()

同时,还可以配置color等参数,可以在官方文档中查看。链接:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar.html

1.3 饼图

语法:

matplotlib.pyplot.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)

参数说明:

x:浮点型数组,表示每个扇形的面积。

explode:数组,表示各个扇形之间的间隔,默认值为0。

labels:列表,各个扇形的标签,默认值为 None。

colors:数组,表示各个扇形的颜色,默认值为 None。

autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。

labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。

pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。

shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。

radius::设置饼图的半径,默认为 1。

startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。

counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。

wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。

textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。

center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。

frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。

rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。

使用示例:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022

@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np


y = np.array([35, 25, 25, 15]) 
color = np.array(["#d5695d", "#5d8ca8", "#65a479", "#a564c9"])
labels = np.array(['A','B','C','D'])  
 

plt.pie(
        y,
        labels=labels, # 设置饼图标签
        colors=color, # 设置饼图颜色
        explode=y/sum(y), # 根据y值突出显示,值越大,距离中心越远
       )

plt.show()

更多參數請到官方網站查看:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html

1.4 折线图

使用语法:

matplotlib.pyplot.plot(x, y, fmt='b', scalex=True, scaley=True, data=None, **kwargs)

参数说明

x:浮点型数组

y:浮点型数组

fmt:点的形状,格式字符串只是快速设置基本行属性的缩写。所有这些以及更多都可以通过关键字参数进行控制,此参数不能作为关键字传递。默认是蓝色的线。[marker][line][color],可以在官方网站的查找

scalex:横向缩放比例

scaley:纵向缩放比例

使用示例:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022

@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np


x = np.arange(2, 26, 2)  # 数据在X轴的位置,是一个可迭代对象

y = np.array([15, 13, 14.5, 17, 20, 25, 26, 26, 24, 22, 18, 15])  # 数据在Y轴的数据,是一个可迭代对象

# x轴和y轴的数据一起组成了所有要绘制出的坐标

plt.plot(x, y, 'g^')  # 传入x和y,通过plot绘图

plt.show()  # 程序在执行的时候展示图形

更多參數請到官方網站查看:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html

2、 多图绘制

我们可以使用 pyplot 中的 subplot()subplots() 方法来绘制多个子图。

subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。

2.1 subplot

官方文档地址:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot.html

使用语法:

subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(**kwargs)
subplot(ax)

以上函数将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1...N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。

设置 numRows = 1,numCols = 2,就是将图表绘制成 1x2 的图片区域, 对应的坐标为:(1, 1), (1, 2)

使用示例:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022

@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np


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

plt.subplot(1, 2, 1)  # 坐标为(1,1),总共有两个子图,1行2列
plt.plot(xpoints,ypoints)
plt.title("plot 1")

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

plt.subplot(122)  # 坐标为(1,2),总共有两个子图,1行2列
plt.plot(x,y)
plt.title("plot 2")

plt.suptitle("Subplot Test")
plt.show()

2.2 subplots

语法:

matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, width_ratios=None, height_ratios=None, subplot_kw=None, gridspec_kw=None, **fig_kw)

参数说明:

  • nrows:默认为 1,设置图表的行数。
  • ncols:默认为 1,设置图表的列数。
  • sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 'none'、'all'、'row' 或 'col'。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 'all':所有子图共享 x 轴或 y 轴,'row' 设置每个子图行共享一个 x 轴或 y 轴,'col':设置每个子图列共享一个 x 轴或 y 轴。
  • squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N1 或 1N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
  • subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
  • gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
  • **fig_kw:把详细的关键字参数传给 figure() 函数。

使用示例:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022

@author: Administrator
"""
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)

# 创建四个子图
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)

# 共享 x 轴
plt.subplots(2, 2, sharex='col')

# 共享 y 轴
plt.subplots(2, 2, sharey='row')

# 共享 x 轴和 y 轴
plt.subplots(2, 2, sharex='all', sharey='all')

# 这个也是共享 x 轴和 y 轴
plt.subplots(2, 2, sharex=True, sharey=True)

# 创建标识为 10 的图,已经存在的则删除
fig, ax = plt.subplots(num=10, clear=True)

plt.show()

3、 绘图配置

3.1常用配置

3.1.1 网格线

我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线。

grid() 方法语法格式如下:

matplotlib.pyplot.grid(b=None, which='major', axis='both', )

参数说明:

  • b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
  • which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
  • axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。
  • **kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。

使用示例:

import numpy as np
import matplotlib.pyplot as plt

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


plt.title("Plot grid() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.plot(x, y)
plt.grid()
plt.show()

更多参数请到官方文档查看:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html

3.1.2 标题和标签

我们可以使用 xlabel()ylabel() 方法来设置 x 轴和 y 轴的标签,使用 title() 方法来设置标题。

import numpy as np
import matplotlib.pyplot as plt

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

plt.title("Plot TEST TITLE And LABEL")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.show()

可以通过查看标题的相关参数来配置标签的参数,官网地址:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.title.html

注意:matplotlib是不支持中文的,如果我们要使用中文的话,我们需要使用fontdict来指定字体

3.1.3 图例

使用语法:

legend()
legend(handles, labels)
legend(handles=handles)
legend(labels)

使用示例:

ax.plot([1, 2, 3], label='Inline label')
ax.legend()

--------------------------------------
line, = ax.plot([1, 2, 3])
line.set_label('Label via method')
ax.legend()

--------------------------------------
ax.legend([line1, line2, line3], ['label1', 'label2', 'label3'])

--------------------------------------
line1, = ax.plot([1, 2, 3], label='label1')
line2, = ax.plot([1, 2, 3], label='label2')
ax.legend(handles=[line1, line2])

还有loc参数可以指定图例的位置等,更多参数请到官方文档查看:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html

3.2 配置组

我们可以使用rcParams来设置全局的一个组的整体配置

设置方式一:

语法:

plt.rcParams['property'] = 'value'  

使用示例:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022

@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np

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

# 关于plt画图的一些配置
plt.rcParams['font.family'] = 'SimHei'  # 设置字体
plt.rcParams['axes.unicode_minus'] = False  # 在坐标轴上可以显示负号
plt.rcParams["axes.labelsize"] = 15  # 设置轴标签的大小
plt.rcParams["axes.titlesize"] = 25  # 设置标题字体大小
plt.rcParams['legend.fontsize'] = 15  # 设置图例字体大小
plt.plot(x, y)
plt.xlabel("x轴的数据")
plt.ylabel("y轴的值")
plt.title("折线图测试")

plt.show()

更多关于rcParams的属性,可以通过官方文档查看:https://matplotlib.org/stable/api/matplotlib_configuration_api.html#matplotlib.rcParams

设置方式二:

我们可以使用rc来配置

我们可以将上面的配置这样进行配置:

# 关于plt画图的一些配置
plt.rc("font", **{"family": 'SimHei'})
plt.rc("axes", **{"unicode_minus": False, "labelsize": 15, "titlesize": 25})
plt.rc("legend", fontsize=15)

标签:plot,None,plt,pyplot,matplotlib,详解,绘图,np
From: https://www.cnblogs.com/liuzhongkun/p/16990238.html

相关文章

  • MyBatis核心配置文件详解
    目录environmentstransactionManagerDataSource引入jdbc.propertiestypeAliasessettings下划线转驼峰延迟加载MappersIDEA核心配置模板及解释environments可以配置多个......
  • DBGridEh全部属性设置详解
    DBGridEh全部属性设置详解 属性子选项 值 说明Allowedoperations[alopInsertEh,alopUpdateEh,alopDeleteEh,alopAppendEh]允许操作类型:插入、更新、删除、追加Al......
  • Pytorch框架详解之一
    Pytorch基础操作numpy基础操作定义数组(一维与多维)寻找最大值维度上升与维度下降数组计算矩阵reshape矩阵维度转换代码实现importnumpyasnpa=np.array([......
  • 详解逻辑回归与评分卡-用逻辑回归制作评分卡-重复值和缺失值处理【菜菜的sklearn课堂
    视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili在银行借贷场景中,评分卡是一种以分数形式来衡量一个客户的信用风......
  • [python] 基于matplotlib实现雷达图的绘制
    雷达图(也称为蜘蛛图或星形图)是一种可视化视图,用于使用一致的比例尺显示三个或更多维度上的多元数据。并非每个人都是雷达图的忠实拥护者,但我认为雷达图能够以视觉上吸引人的......
  • 框架第七课---图书管理系统详解
    ..homePage.html页面代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title>{#<scriptsrc="jQuery3.6.js"></scrip......
  • 关于整数二分的详解
    //查找左边界SearchLeft简写SLintSL(intl,intr){while(l<r){intmid=l+r>>1;if(check(mid))r=mid;elsel=......
  • 【HTML基础篇002】HTML之form表单超详解
    ......
  • YoloV7 标签匹配机 loss 计算详解
    这是一篇v7后处理详解的文章本篇文章主要对YoloV7的后处理进行详细讲解,YoloV7除了结构上,对前后处理都进行了改进,其余包括scheduler、optimizer等与YoloV6都是保......
  • JDBC_API详解
    DiverManager(驱动管理类)作用:①注册驱动②获取数据库链接Connection(数据库连接对象)作用:①获取执行sql的对象②管理事务获取SQL对象事务管理......