首页 > 编程语言 >【python】Matplotlib库学习笔记

【python】Matplotlib库学习笔记

时间:2023-01-21 01:44:05浏览次数:34  
标签:subplot plot plt 标记 python 笔记 Matplotlib np 绘制

Matplotlib 是 python 的绘图库。

以下内容主要介绍 Matplotlib 的子库 pyplot。pyplot 是常用的2D绘图模块,包含一系列绘图相关函数。

plot()函数

plot() 函数可以用来绘制点和线。

import matplotlib.pyplot as plt

'''
x: X轴数据,列表或数组,可选。省略x则y的下标作为x
y: Y轴数据,列表或数组
format_string: 控制曲线的格式字符串,可选
**kewargs: 通过关键字参数设置指定属性,如线的宽度,颜色等
当绘制多条曲线时,各条曲线的x不能省略
'''
# 绘制单条线
plt.plot(x, y, format_sting, **kwargs)

# 绘制多条线
plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)

format_sting 由颜色字符、风格字符和标记字符组成。

常用的颜色字符:

颜色字符 说明 颜色字符 说明
'b' 蓝色 'm' 洋红色magenta
'g' 绿色 'y' 黄色
'r' 红色 'k' 黑色
'c' 青绿色cyan 'w' 白色
'#008000' RGB某颜色 '0.8' 灰度值字符串

常用的风格字符:

风格字符 说明
'-' 实线
'--' 破折线
'-.' 点划线
':' 虚线
"" 无线条

标记字符表明数据点的标记风格,常用的标记字符:

标记字符 说明 标记字符 说明 标记字符 说明
'.' 点标记 '1' 下花三角标记 'h' 竖六边形标记
',' 像素标记(极小点) '2' 上花三角标记 'H' 横六边形标记
'o' 实心圈标记 '3' 左花三角标记 '+' 十字标记
'v' 倒三角标记 '4' 右花三角标记 'x' x标记
'^' 上三角标记 's' 实心方形标记 'D' 菱形标记
'>' 右三角标记 'p' 实心五角标记 'd' 瘦菱形标记
'<' 左三角标记 '*' 星形标记 `' '`

eg:

# eg 假设有数组a,b,c,d
plt.plot(a) #数据点坐标是 (i,a[i])
plt.plot(a, b) # 数据点坐标是 (a[i],b[i])
plt.plot(a, b, c, d) # 第一条曲线数据点坐标是(a[i],b[i]),第二条曲线数据点坐标是(c[j],d[j])

plt.plot(a, 'go-') # 绿色,实心圈标记,实线

除了使用format_string控制曲线格式,还可以用关键字参数控制:

  • color:控制颜色
  • linestyle:线条风格
  • marker:标记风格
  • markerfacecolor:标记颜色
  • markersize:标记尺寸
  • ...

中文显示

pyplot 不默认支持中文显示。有两种方法可以实现中文显示,推荐使用第二种,避免改变全局字体样式。

第一种方法:使用 rcParams 修改字体实现

rcParams属性 说明
font.family 字体样式。黑体'SimHei'、楷体'Kaiti'、隶书'Lisu'、仿宋'FangSong'、幼圆'Youyuan'、华文宋体'STSong'
font.style 字体风格。正常'normal'或斜体'italic'
font.size 字体大小。整数字号或'large'x-small
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'SimHei' # 修改字体样式为黑体
matplotlib.rcParams['font.size'] = 20         # 修改字体大小为20
matplotlib.rcParams['font.style'] = 'italic'  # 修改字体风格为斜体
plt.plot([3, 1, 4, 5, 2])
plt.ylabel("纵轴")
plt.show()

注:这种方法改变的是全局的字体。

第二种方法:在有中文输出的地方增加一个属性:fontproperties

plt.ylabel("横轴", fontproperties = 'SimHei', fontsize = 20, color = 'green')

文本显示

常用的文本显示函数:

函数 说明
plt.xlabel() 对X轴增加文本标签
plt.ylabel() 对Y轴增加文本标签
plt.title() 对图形整体增加文本标签
plt.text() 在任意位置增加文本
plt.annotate() 在图形中增加带箭头的注解
import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')

plt.xlabel('横轴:时间', fontproperties='SimHei', fontsize=25, color='green')
plt.ylabel('纵轴:振幅', fontproperties='SimHei', fontsize=25)
plt.title(r'正弦波实例 $y=cos(2\pi x)$', fontproperties='SimHei', fontsize=25) # $...$为LaTeX的行内公式编辑
plt.text(2, 1, r'$\mu=100$', fontsize=15) # 在坐标(2,1)处增加文本
# 在坐标(2,1)处增加箭头,(3,1.5)处增加文本
plt.annotate(r'$\mu=100$', xy=(2, 1), xytext=(3, 1.5), 
             arrowprops=dict(facecolor='black', shrink=0.1, width=2))

plt.axis([-1, 6, -2, 2])
plt.grid(True)
plt.show()

子绘图区域

.subplot()/.subplots()

plt.subplot(nrows, ncols, index)

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

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

a = np.arange(0.0, 5.0, 0.02)
plt.subplot(211)
plt.plot(a, f(a),a, np.cos(2*np.pi*a),'r--')
plt.title("plot 1")
plt.subplot(2,1,2)
plt.plot(a, np.cos(2*np.pi*a),'r--1')
plt.xlabel("x轴")
plt.title("plot 2")

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

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

'''
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(轴)对象中挤出,对于 N*1 或 1*N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
**fig_kw:把详细的关键字参数传给 figure() 函数。
'''
plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, 						gridspec_kw=None, **fig_kw)

# eg:
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)
plt.show()

.subplot2grid()

# 设定网格形状shape,选中网格位置loc, 确定选中行列区域数量,编号从0开始
plt.subplot2grid(shape, loc, rowspan=1, colspan=1)

# eg:
ax1 = plt.subplot2grid((3,3), (0,0), colspan=3)
# 在ax1区域...画图
ax2 = plt.subplot2grid((3,3), (1,0), colspan=2)
# 在ax2区域...画图
ax3 = plt.subplot2grid((3,3), (1,2), rowspan=2)
# 在ax3区域...画图
ax4 = plt.subplot2grid((3,3), (2,0))
# 在ax4区域...画图
ax5 = plt.subplot2grid((3,3), (2,1))
# 在ax5区域...画图
image-20230121004329720

可以用 GridSpec 类对以上操作进行化简:

import matplotlib.gridspec as gridspec

gs = gridspec.GridSpec(3, 3)

ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[2, 0])
ax5 = plt.subplot(gs[2, 1])

图表函数

关键:选取恰当的图形展示数据含义

pyplot能绘制许多基础图表函数,如下表所示:

函数 说明
plt.plot(x, y, fmt, ...) 绘制一个坐标图
plt.boxplot(data, notch, position) 绘制一个箱形图
plt.bar(left, heigh, width, bottom) 绘制一个条形图
plt.barh(width, bottom, left, heigh) 绘制一个横向条形图
plt.polar(theta, r) 绘制一个极坐标图
plt.pie(data, explode) 绘制一个饼图
plt.psd(x, NFFT=256, pad_to, Fs) 绘制一个功率谱密度图
plt.specgram(x, NFFT=256, pad_to, F) 绘制一个谱图
plt.cohere(x, y, NFFT=256, Fs) 绘制一个X-Y的相关性函数图
plt.scatter(x, y) 绘制一个散点图
plt.step(x, y, where) 绘制一个步阶图
plt.hist(x, bins, normed) 绘制一个直方图
plt.contour(X, Y, Z, N) 绘制一个等值图
plt.vlines() 绘制一个垂直图
plt.stem(x, y, linefmt, markerfmt) 绘制一个柴火图
plt.plot_date() 绘制一个数据日期图

以上基础图表函数的用法就不一一展开细说,重点并不是弄懂每个图表函数怎么用,而是该用什么图表来展示数据

标签:subplot,plot,plt,标记,python,笔记,Matplotlib,np,绘制
From: https://www.cnblogs.com/hzyuan/p/17063453.html

相关文章

  • IoT Network PHY 复习笔记 南安
    Sampling抽样Aliasing混叠Quantisation量化measurediscreteamplitudeinbits.Realsystemshavelimitedresourceintermsofthenumberofavailablebi......
  • 人工智能课程的复习笔记
    人工智能极大极小的算法实现的伪代码(9条消息)最清晰易懂的MinMax算法和Alpha-Beta剪枝详解Bug_Programmer的博客-CSDN博客minmax算法三个`加上Java,再敲一下空格就是代......
  • 【ABAQUS 二次开发笔记】使用keyword 、python和matlab一起处理Odb数据
    用conversionshellelement(S4R单元)建模层合板,有6层ply,每个lamina(ply)有3个integrationpoint,共计18个integrationpoint。我想得到集合SET-Middle-elem中所有integrati......
  • JDBC学习笔记
    1.JDBC的基本概念  1.1 JDBC是什么   JDBC(JavaDataBaseConnectivityJava数据库连接),可以理解为是一种用于执行SQL语句的API。  1.2JDBC的本质  ......
  • 安装 python in Linux: Ubuntu at WSL on windows
      安装ubuntu20.04appstore安装ubuntu安装异常:https://thegeekpage.com/wslregisterdistribution-failed-with-error-0x8007019e/    安装python3.8.1......
  • 数据库笔记小结
    ACID是靠什么保证的?原子性由undolog日志来保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql;一致性由其他三大特性保证,程序代码需要保证业务上的一致性;......
  • 学习笔记——SpringMVC消息转换器概述;使用消息转换器处理请求报文;使用消息转换器处理
    2023-01-20一、SpringMVC消息转换器概述1、HttpMessageConverter<T>消息转换器作用:(1)将java对象与请求报文及响应报文进行相互转化(2)使用HttpMessageConverter<T>将请......
  • [ 5--Token学习 | 青训营笔记]
    这是我参与「第五届青训营」伴学笔记创作活动的第5天Token介绍Token,就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码......
  • Python入门之数据类型转换
    """数据类型转换运算符算数运算符增强运算符"""#1.数据类型转换#intfloatstrstr_usb=input("请输入美元:")#类型转换str-->intin......
  • Python入门之数据类型
    """核心数据类型"""#1.Nonea01="张无忌"#接触变量与数据的绑定关系a01=None#使用None占位sex=None流程图:   #2.整形int#十进制nu......