三 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()

在这里插入图片描述

结尾

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值