三 matplotlib绘图基础函数总结

matplotlib简介

matplotlib 是一个 python 绘图库,其设计理念是能够用轻松简单的方式生 成强大的可视化效果,只需几行代码即可生成绘图,直方图,功率谱,条形 图,错误图,散点图等,是数据分析核心库之一。
matplotlib 中应用最广的 是 matplotlib.pyplot 模块。

下图就是matplotlib绘图的基本流程,我们对于matplotlib.pyplot模块的函数讲解基于此流程进行:
在这里插入图片描述

流程一

创建画布

函数 作用
plt.figure(num=None, figsize=None, dpi=None) (1)num:可以将该num:窗口的身份标识。如果不提供该参数,则创建窗口的时候该参数会自增,如果提供的话则该窗口会以该num为Id存在。(2)figsize:可选参数,英寸单位的宽和高的数组。默认值为 [6.4, 4.8](3)dpi:可选参数,整数。表示该窗口的分辨率,默认值为100。

创建子图

函数 作用
fig,axes = subplots(nrows=1, ncols=1, sharex=False, sharey=False) (1)创建一个画布 (2)nrows,ncols分别代表创建的子图的行数和列数,默认值为1 (3)sharex,sharey参数:bool 或{‘none’, ‘all’, ‘row’, ‘col’} (4)返回值fig为画布的身份标识,axes代表了子图
axes = fig.add_subplot( *args, **kwargs) 此函数不能创建画布,使用前应先创建画布(fig代表画布变量),例:axes = fig.add_subplot(3,3,2)表示将画布分为3行3列的子图,选择第2个子图并返回该子图的身份标识

sharey与sharex的参数相同,以sharex为例:

sharex 含义
True或all 代表所有子图共享x轴
row 代表每行子图共享一个x轴
False或none 每个子图的x轴都是独立的
col 每列子图共享一个x轴

流程一完成,案例展示一下:

import matplotlib.pyplot as plt


#创建画布
fig = plt.figure(figsize = [5,4],dpi = 100)
print('fig画布的身份标识{}'.format(fig))

#使用add_subplot创建子图
axes = fig.add_subplot(3,3,5)
axes.set_title('number ten')

#使用subplots创建画布和子图
fig2,axes = plt.subplots(nrows = 2,ncols = 2)
axes[0,1].set_title('number two')
print('fig2画布的身份标识{}'.format(fig2))

plt.show()

效果图在这里插入图片描述

流程二

大的框架我们已经准备好了,接下来就是给画布或者子图进行画图表,并添加细节。
首先是图表的标题,横纵轴的刻度,范围,名称等

函数 作用
plt.title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs) (1)label 是要设置的标题文本 (2)fontdict 可选参数,用于设置标题的字体属性,例如字体名称、大小、颜色等。(3)loc 参数用于指定标题的位置,可以使用字符串( ‘left’、‘center’、‘right’等)或数字表示。(4)pad 参数用于指定标题与图形边界之间的距离。
plt.xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)和plt.ylabel (1)xlabel:x轴的名称 (2)fontdict 可选参数,用于设置x轴名称的字体属性 (3)x轴名称与图形边界之间的距离 (4)loc 参数用于指定标题的位置
plt.xlim(*args, **kwargs)和plt.ylim 显示或设置x轴的范围,若不填参数,函数返回x轴的左右范围。填参数表示设置x轴的表示范围。例plt.xlim(-1,2),plt.xlim(left = -1),plt.xlim(right = 2)
plt.xticks(ticks=None, labels=None, *, minor=False, **kwargs)和plt.yticks (1)ticks:x轴刻度位置的列表 (2)labels:放在指定刻度位置的标签文本。当ticks参数有输入值,该参数才能传入参数 (3)minor:默认值就是按照ticks给定列表进行显示刻度,为True时ticks将不起效果,刻度由系统选择
plt.legend(title,loc,frameon) (1)title:图例的标题 (2)loc:图例在图表中的位置 (3)frameon:设置是否含有边框。都为可选参数

上表中的ontdict是一次性设置多个属性值,然后传入多个函数,就可以控制多个函数的字体属性
例如:

fontdict = {
    
    'fontsize': 10, 'family': ['serif','SimSun'],'weight':'bold'}
ax.set_ylabel(label, fontdict=fontdict)

接着我们进行绘制折线,散点,柱状等图表

color 说明 color 说明
‘b’ 蓝色 ‘m’ 洋红色
‘g’ 绿色 ‘y’ 黄色
‘r’ 红色 ‘k’ 黑色
‘c’ 青绿色 ‘w’ 白色
‘#008000’ RGB某颜色
linestyle 说明
‘-‘ 实线
‘–’ 破折线
‘-.’ 点划线
‘:’ 虚线
’ ’ ’ ‘ 无线条
marker 说明 marker 说明
‘.’ 点标记 ‘1’ 下三角标记
‘,’ 像素标记(极小点) ‘2’ 上三角标记
‘o’ 实心圈标记 ‘3’ 左花三角标记
‘v’ 倒三角标记 ‘4’ 右花三角标记
‘^’ 上三角标记 ’s’ 实心方形标记
‘>’ 右三角标记 ‘p’ 实心五角标记
‘<’ 左三角标记 ‘*’ 星形标记
‘h’ 竖六边形标记 ‘d’ 瘦菱形标记
‘H’ 横六边形标记 ‘|’ 垂直线标记
‘+’ 十字标记 ‘D’ 菱形标记
‘x’ x标记
函数 作用
plt.plot((x, y, color,linestyle,marker, markerfacecolor,markersize) 折线图常用的参数:(1)x,y为输入列表,依据x,y的画出折线图 (2)color:控制颜色 (3)linestyle:线条风格 (4)marker:标记风格 (5)markerfacecolor:标记颜色 (6)markersize:标记尺寸
plt.bar(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, **kwargs) 柱状图(1)x:柱子在x轴上的坐标。注意x可以为字符串数组! (2)height:柱子的高度,即y轴上的坐标 (3)width:柱子的宽度。浮点数或类数组结构。默认值为0.8。(4)bottom:柱子的基准高度。浮点数或类数组结构。默认值为0。(4)align:柱子在x轴上的对齐方式.取值{‘center’, ‘edge’},默认为’center’。‘center’:x位于柱子的中心位置。‘edge’:x位于柱子的左侧。如果想让x位于柱子右侧,需要同时设置负width 以及align=‘edge’。color:柱子的填充色.hatch:柱子填充符号
plt.pie(x, labels=,autopct=,colors) 饼状图:(1)x:数量,自动算百分比 (2)labels:每部分名称 (3)autopct:占比显示指定%1.2f%% (4)colors:每部分颜色
plt.scatter(x, y, s=20, c=‘b’, marker=‘o’, alpha=None, ) 散点图:x,y:将要绘制的数据,s:表示一个点的大小,可以为一个数或者数组,c:颜色,可为数组,marker:标记样式,alpha:点的透明度

流程三

图像的保存与显示

函数 作用
plt.show() 显示绘制的图表
plt.savefig(fname, dpi=None ) fname:指定格式图片或者指定文件位置 dpi:画质

如果plt.show() 在plt.savefig()前,就会导致保存图片是空白的情况。

其它函数与注意事项

注意事项

(1)在画布上使用子图进行标题,x,y轴的刻度,范围,名称等设置时可能会出现以下报错TypeError: 'Text' object is not callable
检查你的代码如下

axes.title('number ten')

改为

axes.set_title('number ten')

就行了。因为title和set_title是matplotlib的两种接口,对于子图只能使用set_title的接口,其它的函数也类似加上set_
(2)在上面忘了介绍网格化,这里补充一下
plt.grid(visible=None, which=‘major’, axis=‘both’, **kwargs)

函数 作用
visible 可选参数,布尔值;是否显示网格线,若设置了网格线的关键字参数,则表明要设置网格线且可见;默认visible=None 则网格线不可见
which 可选参数,要操作的网格线类型:‘major’, ‘minor’, ‘both’,默认取值: major,绘制主要刻度网格线
axis 可选参数,要操作哪个轴的网格线:‘x’, ‘y’, ‘both’,默认: both ,同时绘制x轴和y轴网格线
alpha 网格线透明度
color 网格线颜色
linestyle 网格线线条类型
linewidth 网格线线条粗细

(3)中文不显示问题,只需要加上

plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

3D图表

首先,我们先创建3D对象

#方法一,利用关键字
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#定义坐标轴
fig = plt.figure()
ax1 = plt.axes(projection='3d') #直接在画布上创建
ax = fig.add_subplot(111,projection='3d')  #多个子图的3D图表


#方法二,利用三维轴方法
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#定义图像和三维格式坐标轴
fig=plt.figure()
ax2 = Axes3D(fig)

这里创建3D对象的第二种方法个人感觉不如第一种方法好用,下面的例子基于第一种方法实现

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
x = np.array([i for i in range(10)])
y = np. array([i for i in range(10)])
z = 3*x+y

#定义坐标轴
fig = plt.figure()
#3D折线图
ax = fig.add_subplot(2,2,1,projection = '3d' ) #多个子图的3D图表
ax.set_title('one')
ax.plot3D(x,y,z)
#3D散点图
ax = fig.add_subplot(2,2,2,projection = '3d' ) #多个子图的3D图表
ax.set_title('two')
ax.scatter3D(x,y,z)
#3D散点图的第二种写法
ax =fig.add_subplot(2,2,3,projection = '3d' ) #多个子图的3D图表
ax.set_title('four')
ax.scatter(x,y,z)
plt.show()

在这里插入图片描述

结尾

整理这些东西真是不容易,希望能帮到大家,也希望大家能多多支持在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_59151709/article/details/130290908