文章目录
- 一、简介
- 二、安装与调用
- 三、绘图与风格设置
- 3.1、绘图标记
- 3.1.1、标记类型(marker='*')
- 3.1.2、标记大小、内部和边框颜色(ms=10、mfc='r'、mec='g')
- 3.2、绘图线
- 3.2.1、线类型(linestyle='--')
- 3.2.2、线宽(linewidth='20.5')
- 3.2.3、线颜色(color='r')
- 3.3、添加(标题 + 标签 + 图例 + 网格) + 设置刻度(范围/位置/标签)
- 3.3.1、*args 和 **kwargs 的用法
- 3.3.2、plt.title():添加标题
- 3.3.3、plt.xlabel():添加x轴标签
- 3.3.4、plt.xlim():设置x轴刻度的范围
- 3.3.5、plt.xticks():设置x轴刻度的位置和标签
- 3.3.6、plt.legend():添加图例
- 3.3.7、plt.grid():添加网格
- 3.4、综合实战
- 四、其他函数
- 4.1、plt.subplot():同时绘制多张图
- 4.2、plt.savafig():保存图像
- 4.3、plt.colorbar():显示颜色条
- 4.4、plt.show():显示图像
- 五、多类型图表绘制
- 5.1、plt.plot():绘制点和线
- 5.2、plt.scatter():绘制散点图
- 参考文献
一、简介
matplotlib是Python的可视化绘图工具之一,用于创建静态、动态或交互式的可视化图表。matplotlib官网
- 最初目的:用于可视化癫痫病人的脑皮层电图相关的信号。
- 发展历程:由 John D. Hunter 在 2002 年开始编写,在 2003 年发布了第一个版本。matplotlib 是一个社区项目,由其用户维护。
- 支持跨平台运行,可以配合 Python GUI 工具包(比如: PyQt,WxPython、Tkinter)在应用程序中嵌入图形。并支持以脚本的形式在 Python、IPython Shell、Jupyter Notebook 以及 Web 应用的服务器中使用。
- 提供了面向对象绘图的 API 接口,包括 2D 绘图库,以及部分 3D 绘图接口。可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
二、安装与调用
matplotlib 是 Python 的第三方绘图库,故需要安装后使用。本节以 Windows10 系统为例,介绍 Matplotlib 的几种安装方式。
- (1)使用 pip 安装
打开 CMD 命令提示符窗口,并输入以下命令:pip install matplotlib
- (2)使用 Anaconda 安装
安装 matplotlib 的最好方法是下载 Python 的 Anaconda 发行版,因为 matplotlib 被预先安装在 Anaconda 中。- (3)使用 conda 安装
打开 CMD 命令提示符窗口,并输入以下命令:conda install -c conda-forge matplotlib
在绘图之前,需要先导入pyplot库:
import matplotlib.pyplot as plt
。然后就可以调用相应的方法进行绘图。pyplot 是 matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。plt 是通过as设置的(常用)别名。
三、绘图与风格设置
3.1、绘图标记
3.1.1、标记类型(marker=‘*’)
使用关键字参数 marker 来设置点类型。RUNOOB.COM:绘图标记
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
标记符 | '.' | ',' | 'o' | '*' | 'v' | '^' | '<' | '>' | '1' | '2' | '3' | '4' | 's' | 'p' | 'h' | 'H' | '+' | 'P' | 'x' | 'X' | 'D' | 'd' | '_' | I |
说明 | Point | Pixel | Circle | star | triangle_down | triangle_up | triangle_left | triangle_right | tri_down | tri_up | tri_left | tri_right | Square | Pentagon | hexagon1 | hexagon2 | Plus | Plus (filled) | x | X (filled) | Diamond | Diamond (thin) | Hline | Vline |
3.1.2、标记大小、内部和边框颜色(ms=10、mfc=‘r’、mec=‘g’)
使用关键字参数 markersize、markerfacecolor、markeredgecolor 来设置标记大小、内部颜色、边框颜色。
- markersize,简写为 ms:定义标记的大小。
- markerfacecolor,简写为 mfc:定义标记的内部颜色。
- markeredgecolor,简写为 mec:定义标记的边框颜色。
3.2、绘图线
3.2.1、线类型(linestyle=‘–’)
使用关键字参数 linestyle 或 ls 来设置线类型。
序号 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
标记符 | '-' | '--' | '-.' | ':' |
说明 | 实线 | 破折线 | 点划线 | 虚线 |
3.2.2、线宽(linewidth=‘20.5’)
使用关键字参数 linewidth 或 lw 来设置线宽。(字符串格式)可以输入浮点数。
3.2.3、线颜色(color=‘r’)
使用关键字参数 color 或 c 来设置颜色。
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
标记符 | 'b' | 'g' | 'r' | 'c' | 'm' | 'y' | 'k' | 'w' |
说明 | 蓝色Blue | 绿色Green | 红色Red | 青色Cyan | 品红Magenta | 黄色Yellow | 黑色Black | 白色White |
3.3、添加(标题 + 标签 + 图例 + 网格) + 设置刻度(范围/位置/标签)
序号 | 函数 | 说明 |
---|---|---|
1 | plt.title() | 添加标题。可以指定名称、位置、颜色、字体大小等参数。 |
2 | plt.xlabel() | 添加x轴标签。可以指定名称、位置、颜色、字体大小等参数。 |
3 | plt.ylabel() | 添加y轴标签。可以指定名称、位置、颜色、字体大小等参数。 |
4 | plt.xlim() | 设置x轴刻度的范围 |
5 | plt.ylim() | 设置y轴刻度的范围 |
6 | plt.xticks() | 设置x轴刻度的位置和标签。可以指定标签的字体大小、字体样式、旋转角度 |
7 | plt.yticks() | 设置y轴刻度的位置和标签。可以指定标签的字体大小、字体样式、旋转角度 |
8 | plt.legend() | 添加图例。可以指定图例的大小、位置、标签。 |
9 | plt.grid() | 添加网格。可以指定网格的方向、线类型、线宽、颜色。 |
3.3.1、*args 和 **kwargs 的用法
【Python】*args 和 **kwargs 的用法【最全详解】
- 位置参数(arguments,args) :
* args
表示将不定数量的参数传递给一个函数, 本质上是一个元祖tuple
- 关键字参数(keyword arguments,kwargs):
** kwargs
表示将不定长度的 键值对(key-value)作为参数传递给一个函数, 本质上是一个字典dict
3.3.2、plt.title():添加标题
matplotlib.pyplot.title() 参数详解
"""
函数说明:plt.title(*args, **kwargs)
关键字参数:
(0)label 标签文本
(1)fontsize 字体大小(默认12) 可选参数:[xx-small, x-small, small, medium, large, x-large, xx-large]
(2)fontweight 字体粗细 可选参数:[light, normal, medium, semibold, bold, heavy, black]
(3)fontstyle 字体类型 可选参数:[normal正常, italic斜体, oblique倾斜]
(4)verticalalignment 水平对齐方式 可选参数:[center, top, bottom, baseline]
(5)horizontalalignment 垂直对齐方式 可选参数:[left, right, center]
(6)rotation 旋转角度 可选参数:[vertical, horizontal, 数字]
(7)alpha 透明度 参数值范围:[0, 1]
(8)backgroundcolor 标题背景颜色
(9)bbox 给标题增加外框 常用参数如下:[boxstyle方框外形, facecolor(简写fc)背景颜色, edgecolor(简写ec)边框线条颜色, edgewidth边框线条大小]
"""
3.3.3、plt.xlabel():添加x轴标签
matplotlib.pyplot.xlabel 参数详解
"""
函数说明:plt.xlabel(*args, **kwargs)
关键字参数:
xlabel/ylabel 标签文本
fontsize 字体大小。[数字, 'small', 'large', 'medium']
verticalalignment 上下平移。['top', 'bottom', 'center', 'baseline']
horizontalalignment 左右平移。['center', 'right', 'left']
rotation 旋转角度。['vertical', 'horizontal']
默认:plt.xlabel(fontsize='large', verticalalignment='top', horizontalalignment='center', rotation='horizontal')
默认:plt.ylabel(fontsize='large', verticalalignment='bottom', horizontalalignment='center', rotation='vertical')
"""
3.3.4、plt.xlim():设置x轴刻度的范围
matplotlib.pyplot.xlim() 参数详解
"""
函数说明:plt.xlim(*args, **kwargs)
关键字参数:
left 设置刻度的最小值
right 设置刻度的最大值
函数说明:plt.ylim(*args, **kwargs)
关键字参数:
bottom 设置刻度的最小值
top 设置刻度的最大值
"""
3.3.5、plt.xticks():设置x轴刻度的位置和标签
matplotlib.pyplot.xticks() 参数详解
"""
函数说明:plt.xticks(ticks=None, labels=None, **kwargs)
关键字参数:
ticks 刻度位置(列表格式)。若传入空列表,即不显示x轴。
labels 刻度位置对应的标签文本(列表格式)。当ticks参数有输入值,该参数才能传入参数
**kwargs 用来控制标签文本的展示格式。例如:标签的字体大小、字体样式、旋转角度(默认逆时针旋转)等
"""
3.3.6、plt.legend():添加图例
matplotlib.pyplot.legend() 参数详解
"""
函数说明:plt.legend(*args, **kwargs)
关键字参数:
loc 设置图例位置(int数字、string单词均可以控制)
0:'best' 1:'upper right' 2:'upper left' 3:'lower left'
4:'lower right' 5:'right' 6:'center left' 7:'center right'
8:'lower center' 9:'upper center' 10:'center'
fontsize 设置字体大小[int, float, {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'}]
frameon 是否绘制图例边框[False, True]
edgecolor 设置图例边框颜色['blue', 'red'...]
facecolor 设置图例背景颜色['blue', 'red'...]
title 设置图例标题(字符串)
prop 字体参数
markerscale 图例标记与原始标记的相对大小
markerfirst 如果为True,则图例标记位于图例标签的左侧
numpoints 线条图图例条目创建的标记点数
scatterpoints 散点图图例条目创建的标记点数
scatteryoffsets 散点图图例条目创建的标记的垂直偏移量
fancybox 控制是否应在构成图例背景的FancyBboxPatch周围启用圆边
shadow 控制是否在图例后面画一个阴影
framealpha 控制图例框架的 Alpha 透明度
ncol 设置图例分为n列展示
borderpad 图例边框的内边距
labelspacing 图例条目之间的垂直间距
handlelength 图例句柄的长度
handleheight 图例句柄的高度
handletextpad 图例句柄和文本之间的间距
borderaxespad 轴与图例边框之间的距离
columnspacing 列间距
bbox_to_anchor 指定图例在轴的位置
bbox_transform bbox的转换
"""
3.3.7、plt.grid():添加网格
matplotlib.pyplot.grid() 参数详解
"""
函数说明:plt.grid(b=None, which='major', axis='both', **kwargs)
输入参数:
b: 是否显示网格。布尔值=[True, False]。可选,默认None
which: 网格线。['major', 'minor', 'both']。可选,默认'major'
axis: 设置显示哪个方向的网格线。['x', 'y', 'both']。可选。
**kwargs: 设置网格样式。[color='r', linestyle='-', linewidth=2],分别表示网格线的颜色,样式和宽度。可选。
"""
3.4、综合实战
from matplotlib import pyplot as plt
import numpy as np
import math
# 创建 0~2π 的ndarray对象,步长为0.05。
x = np.arange(0, math.pi*2, 0.05) # 创建一维向量:x
y = np.sin(x) # 创建一维向量:y
p1, = plt.plot(x+1, y+1) # plot绘图1
p2, = plt.plot(x+2, y+2) # plot绘图2
p3, = plt.plot(x+3, y+3, marker='o', ms=5, color='b')
p4, = plt.plot(x+4, y+4, linestyle='--', linewidth='8', color='r')
plt.xlabel(xlabel="angle") # 添加x轴标签
plt.ylabel(ylabel="sin") # 添加y轴标签
plt.xlim(left=0, right=12) # 设置x轴刻度的范围
plt.ylim(bottom=-2, top=8) # 设置y轴刻度的范围
plt.xticks(rotation=-135) # 设置x轴刻度的位置和标签
plt.yticks(ticks=[1, 2, 3], labels=['A', 'B', 'C'], rotation=30)
plt.legend([p1, p2, p3, p4], ["line 1", "line 2", '3', '4'], loc='upper left') # 添加图例
plt.grid(b=True, which='major', axis='x')
plt.title(label='sin wave') # 添加标题
plt.show() # 显示图像
四、其他函数
4.1、plt.subplot():同时绘制多张图
方式一:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([0, 6])
y = np.array([0, 100])
plt.subplot(2, 2, 1), plt.plot(x+10, y+10), plt.title("plot 1")
plt.subplot(2, 2, 2), plt.plot(x+15, y-10), plt.title("plot 2")
plt.subplot(2, 2, 3), plt.plot(x-10, y+20), plt.title("plot 3")
plt.subplot(2, 2, 4), plt.plot(x+30, y-20), plt.title("plot 4")
plt.show()
方式二:
import matplotlib.pyplot as plt
import numpy as np
# 读取多张图像
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
for ii in range(6):
plt.subplot(2, 3, ii+1)
plt.imshow(images[ii], 'gray')
plt.title(titles[ii])
plt.savefig('{}.png'.format(ii+1))
plt.show()
4.2、plt.savafig():保存图像
注意事项:调用
plt.savafig()
必须在plt.show()之前,不然保存结果为一张空白图。因为plt.show()之后会自动调用clear()清除缓存。plt.savefig() 保存空白或显示错乱
"""
函数说明:plt.savefig('test.jpg', dpi=200, bbox_inches='tight')
输入参数:
path 保存路径
dpi 设置图像的分辨率
bbox_inches 设置图像与图例之间的位置,可以避免图像与图例叠加在一起。
"""
4.3、plt.colorbar():显示颜色条
颜色条类型
4.4、plt.show():显示图像
使用plt.show()之后,程序会在该语句处暂停,且不继续向下执行。只有关闭当前图像,程序才可以继续执行。
五、多类型图表绘制
序号 | 函数 | 说明 | 函数 | 说明 |
---|---|---|---|---|
2 | plt.plot() | 绘制点和线 | plt.scatter() | 绘制散点图 |
4 | plt.bar() | 绘制条形图 | plt.barh() | 绘制横向条形图 |
6 | plt.hist() | 绘制直方图 | plt.pie() | 绘制饼图 |
8 | plt.psd() | 绘制功率谱密度图 | plt.specgram() | 绘制谱图 |
10 | plt.cohere() | 绘制相关性函数 | plt.boxplot() | 绘制箱形图 |
12 | plt.step() | 绘制步阶图 | plt.polar() | 绘制极坐标图 |
14 | plt.contour() | 绘制等值图 | plt.vlines() | 绘制垂直图 |
16 | plt.stem() | 绘制柴火图 | plt.plot_date() | 绘制数据日期 |
18 | plt.clabel() | 绘制轮廓图 | plt.hist2d() | 绘制2D直方图 |
20 | plt.quiverkey() | 绘制颤动图 | plt.stackplot() | 绘制堆积面积图 |
22 | plt.Violinplot() | 绘制小提琴图 |
5.1、plt.plot():绘制点和线
plt.plot() 函数详解
"""
函数说明:plt.plot(x, y, '可选字符串类型', **kwargs)
输入参数:
x x轴数据(列表或数组)。可选参数:当没有x,则默认[0, 1, …, len(y)]递增
y y轴数据(列表或数组)
可选字符串类型 [marker标记类型, linestyle线类型]
**kwargs 如:[label, linewidth, color]
"""
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
plt.plot(x, y, 'r--', label = 'aa')
plt.xlabel('this is x')
plt.ylabel('this is y')
plt.title('this is a demo')
plt.legend() # 显示样例
plt.show() # 显示图像
5.2、plt.scatter():绘制散点图
plt.scatter()函数详解
"""
函数说明:plt.scatter(x, y, s=20, c='b', marker='o', alpha=None, **kwargs)
输入参数:
x,y: 长度相同的数组
s: 点的大小。可选,默认20。若输入为数组,则数组中的每个参数是对应点的大小。
c: 点的颜色。可选,默认蓝色 'b'。若输入为数组,则数组中的每个参数是对应点的颜色。
marker: 标记点类型。可选,默认圆圈'o'。
linewidths: 标记点宽度。可选,默认None。
alpha: 透明度=[0, 1]。可选,默认None。
cmap: (1)Colormap,默认None,标量或者是颜色条colormap的一个名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是image.cmap。
(2)设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 0 到 100 的数组。
norm: 亮度Normalize=[0, 1],默认None。只有 c 是一个浮点数的数组的时才使用。
vmin,vmax: 亮度设置,在 norm 参数存在时会忽略。
edgecolors: 颜色或颜色序列,默认'face',可选值有'face', 'none', None。
plotnonfinite: 布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
**kwargs: 其他参数。
"""
import numpy as np
import matplotlib.pyplot as plt
# 设置随机数种子(若输入数字不变,则每次运行结果相同。否则不同)
np.random.seed(2)
N = 20
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (50*np.random.rand(N))**2
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.colorbar() # 显示颜色条
plt.show() # 显示图像
参考文献
1、matplotlib官网
2、C语言中文网:matplotlib教程
3、RUNOOB.COM官网:matplotlib教程
4、matplotlib库介绍:表格汇总
5、Python–matplotlib(基本用法)
6、Python深度学习入门之plt画图工具基础使用(注释详细,超级简单)
7、python基础语法(二)——— plt的一些函数使用