首页 > 其他分享 >matplotlib的基础使用

matplotlib的基础使用

时间:2025-01-12 22:29:27浏览次数:3  
标签:subplot plot plt 基础 matplotlib fontsize 使用 np sin

目录

一、基本图形绘制

二、多图布局

三、Matplotlib绘图属性设置

四、常用视图

五、3D图

六、图像处理

七、Matplotlib 绘图指南

基本图形绘制

1. 绘制基本图形

2. 显示中文字符

3. 画布配置

4. 在一个画布上绘制多个图

多图布局

1. 均匀分布子图

2. 不均匀分布子图

3. 图形嵌套

Matplotlib 绘图属性设置

1. 线条属性

2. 坐标轴刻度设置

3. 坐标轴范围

4. 坐标轴配置

5. 标题和网格

6. 标签

7. 文本

8. 注释

9. 保存图片

高级主题

1. 颜色映射

2. 图例 (Legend)

3. 三维绘图

完整示例

参考文献


一、基本图形绘制

1. 绘制基本图形

plt.plot()

.plot函数:

plt.plot(x, y, format_string, **kwargs):

x为 x(横轴)轴数据,可为列表或数组;

y同理;

format_string 为控制曲线的格式字符串;

**kwargs 第二组或更多的(x, y, format_string)

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

颜色字符:‘b’蓝色 ;‘#008000’RGB某颜色;‘0.8’灰度值字符串

风格字符:‘-’实线;‘–’破折线; ‘-.’点划线; ‘:’虚线 ; ‘’‘’无线条

标记字符:‘.’点标记 ‘o’ 实心圈 ‘v’倒三角 ‘^’上三角

eg: plt.plot(a, a1.5, ‘go-’, a, a2, ‘*’) 第二条无曲线,只有点

.plot 显示中文字符:

pyplot默认并不支持中文显示,需要 rcParams 修改字体来实现

rcParams的属性:

‘font.family’ 用于显示字体的名字

‘font.style’ 字体风格,正常’normal’ 或斜体’italic’

‘font.size’ 字体大小,整数字号或者’large’ ‘x-small’

eg:

import matplotlib

matplotlib.rcParams[‘font.family’] = ‘STSong’

matplotlib.rcParams[‘font.size’] = 20

只希望在某地方绘制中文字符,不改变别的地方的字体:

在有中文输出的地方,增加一个属性: fontproperties

eg : plt.xlabel(‘横轴:时间’, fontproperties = ‘simHei’, fontsize = 20)

pyplot文本显示函数:

plt.xlabel():对x轴增加文本标签

plt.ylabel():同理

plt.title(): 对图形整体增加文本标签

plt.text(): 在任意位置增加文本

plt. annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict), 在图形中增加带箭头的注解。s表示要注解的字符串是什么,xy对应箭头所在的位置,xytext对应文本所在位置,arrowprops定义显示的属性。

eg:

plt.xlabel(‘横轴:时间’, fontproperties = ‘SimHei’, fontsize = 15, color = ‘green’)

plt.ylabel(‘纵轴:振幅’, fontproperties = ‘SimHei’, fontsize = 15)

plt.title(r’正弦波实例 $y=cons(2\pi x)$’ , fontproperties = ‘SimHei’, fontsize = 25)

plt.annotate (r’%mu=100$, xy = (2, 1), xytext = (3, 1.5),

arrowprops = dict(facecolor = ‘black’, shrink = 0.1, width = 2)) # width表示箭头宽度

plt.text (2, 1, r’$\mu=100$, fontsize = 15)

plt.grid(True)

plt.annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict)

2. 样式和颜色

样式: '-','--','-.',':','.',',',,o,^,v,<,>,s,+,x,D,d,1,2,3,4,h,H,p,| ,_

颜色: b(蓝色),g(绿色),r(红色),c(青色),m(品红),y(黄色),k(黑色),w(白色)

plt.plot(x, y, 'r--')

3. 画布配置

plt.figure()

4. 在一个画布上绘制多个图

plt.plot(x, np.sin(x))

plt.plot(x, np.cos(x), 'r')

plt.plot(x, -np.sin(x), 'g--')

5. 立刻显示图片

plt.show()

二、多图布局

1. 均匀分布

plt.subplot()函数

2. 不均匀分布

plt.subplot()函数

3. 图形嵌套

plt.add_subplot()

4. 图形嵌套

plt.axes()

plt.add_axes()

5. 均匀布局

plt.subplots()

三、Matplotlib绘图属性设置

import matplotlib as mpl

1. 线条属性

color 颜色

linestyle 样式

linewidth 宽度

alpha 透明度

marker 标记

mfcmarker face color 标记的背景颜色

2. 坐标轴刻度

plt.xticks()

plt.yticks()

3. 坐标轴范围

plt.xlim()

plt.ylim()

4. 坐标轴配置

plt.axis()

5. 标题 和 网格

plt.title()

plt.grid()

6. 标签

plt.xlabel()

plt.ylabel()

7. 文本

plt.text()

8. 注释

plt.annotate()

9. 保存图片

plt.savefig()

四、常用视图

plt子绘图区域

plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1):设定网格,选中网格,确定选中行列区域数量,编号从0开始。

eg:

plt.subplot2grid((3, 3), (1, 0), colspan = 2) //(3,3)表示分为3行3列,(1,0)表示选中第1行,第0列的区域进行绘图,colspan=2表示在选中区域的延伸。

1. 折线图

x = np.linspace(0, 10, 100)

y = np.sin(x)

plt.plot(x, y)

plt.title('Sine Wave')

plt.xlabel('X axis')

plt.ylabel('Y axis')

plt.show()

2. 柱状图和条形图

categories = ['A', 'B', 'C', 'D']

values = [3, 7, 2, 5]

plt.bar(categories, values)

plt.title('Bar Chart')

plt.show()

  1. 直方图

data = np.random.randn(1000)

plt.hist(data, bins=30)

plt.title('Histogram')

plt.show()

4. 箱型图

5. 散点图

x = np.random.rand(100)

y = np.random.rand(100)

plt.scatter(x, y)

plt.title('Scatter Plot')

plt.show()

6. 饼图

7. 面积图

8. 热力图

9. 极坐标图

10. 雷达图

11. 等高线图

五、3D图

1. 三维折线图

2. 三维散点图

3. 三维柱形图

六、图像处理

1. 读取图片

plt.imread()

2. 显示图片

plt.imshow()

3. 垂直翻转

plt.imshow(img, origin='lower')

# 或

plt.imshow(img[::-1])

4. 水平翻转

plt.imshow(img[:, ::-1])

5. 保存图片

plt.imsave()

Matplotlib 绘图指南

基本图形绘制
1. 绘制基本图形

使用 plt.plot() 函数可以绘制基本的折线图。

plt.plot(x, y, format_string, **kwargs)

  • x 和 y 是数据数组。
  • format_string 是格式字符串,由颜色、线条风格和标记字符组成。

示例:

import matplotlib.pyplot as plt

import numpy as np

x = np.linspace(0, 10, 100)

y = np.sin(x)

plt.plot(x, y, 'r--', label='sin(x)')

plt.legend()

plt.show()

2. 显示中文字符

Matplotlib 默认不支持中文显示,需要修改字体设置。

方法一: 修改全局字体设置

import matplotlib

matplotlib.rcParams['font.family'] = 'SimHei' # 使用黑体字体

matplotlib.rcParams['font.size'] = 14

方法二: 在文本函数中指定字体

plt.xlabel('横轴: 时间', fontproperties='SimHei', fontsize=14)

3. 画布配置

创建一个新的画布:

plt.figure(figsize=(8, 6)) # 设置画布大小

4. 在一个画布上绘制多个图

plt.figure()

plt.plot(x, np.sin(x), label='sin(x)')

plt.plot(x, np.cos(x), 'r', label='cos(x)')

plt.plot(x, -np.sin(x), 'g--', label='-sin(x)')

plt.legend()

plt.show()

多图布局
1. 均匀分布子图

使用 plt.subplot() 函数创建子图。

plt.subplot(nrows, ncols, index)

示例:

plt.figure(figsize=(12, 8))

plt.subplot(2, 2, 1)

plt.plot(x, np.sin(x))

plt.subplot(2, 2, 2)

plt.plot(x, np.cos(x))

plt.subplot(2, 2, 3)

plt.plot(x, np.tan(x))

plt.subplot(2, 2, 4)

plt.plot(x, np.exp(x))

plt.tight_layout()

plt.show()

2. 不均匀分布子图

使用 plt.subplots() 函数创建多个子图,并返回 Figure 和 Axes 对象。

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 8))

axes[0, 0].plot(x, np.sin(x))

axes[0, 1].plot(x, np.cos(x))

axes[1, 0].plot(x, np.tan(x))

axes[1, 1].plot(x, np.exp(x))

plt.tight_layout()

plt.show()

3. 图形嵌套

使用 fig.add_subplot() 方法添加子图。

fig = plt.figure(figsize=(8, 6))

ax1 = fig.add_subplot(111) # 整个画布

ax2 = fig.add_subplot(221) # 左上角

ax3 = fig.add_subplot(222) # 右上角

ax4 = fig.add_subplot(212) # 整个下部

ax1.plot(x, np.sin(x))

ax2.plot(x, np.cos(x))

ax3.plot(x, np.tan(x))

ax4.plot(x, np.exp(x))

plt.show()

Matplotlib 绘图属性设置
1. 线条属性

plt.plot(x, y, color='blue', linestyle='-', linewidth=2, alpha=0.8,

marker='o', markersize=8, markerfacecolor='red')

  • color 或 c: 线条颜色。
  • linestyle 或 ls: 线条风格,如 '-', '--', '-.', ':'。
  • linewidth 或 lw: 线条宽度。
  • alpha: 透明度,取值范围 0 (完全透明) 到 1 (不透明)。
  • marker: 数据点标记,如 'o', '.', '^' 等。
  • markersize: 标记大小。
  • markerfacecolor 或 mfc: 标记填充颜色。
2. 坐标轴刻度设置

设置 x 轴和 y 轴的刻度:

plt.xticks(ticks, labels, rotation=45)

plt.yticks(ticks, labels)

3. 坐标轴范围

设置坐标轴的显示范围:

plt.xlim(xmin, xmax)

plt.ylim(ymin, ymax)

4. 坐标轴配置

plt.axis('equal') # x 和 y 轴比例相同

plt.axis('scaled')

plt.axis('off') # 关闭坐标轴

plt.axis([xmin, xmax, ymin, ymax]) # 设置坐标轴范围

5. 标题和网格

plt.title('正弦波示例', fontproperties='SimHei', fontsize=16)

plt.grid(True, linestyle='--', alpha=0.5)

6. 标签

plt.xlabel('时间', fontproperties='SimHei', fontsize=14)

plt.ylabel('振幅', fontproperties='SimHei', fontsize=14)

7. 文本

在图中任意位置添加文本:

plt.text(2, 1, r'$\mu=100$', fontsize=14)

8. 注释

添加带箭头的注释:

plt.annotate(r'$\mu=100$', xy=(2, 1), xytext=(3, 1.5),

arrowprops=dict(facecolor='black', shrink=0.1, width=2))

9. 保存图片

plt.savefig('figure.png', dpi=300, bbox_inches='tight')

  • dpi: 图像分辨率。
  • bbox_inches='tight': 去除图的周围空白。

高级主题
1. 颜色映射

使用颜色映射表示数据的第三个维度。

import matplotlib.pyplot as plt

import numpy as np

x = np.linspace(0, 10, 100)

y = np.linspace(0, 10, 100)

X, Y = np.meshgrid(x, y)

Z = np.sin(X) + np.cos(Y)

plt.imshow(Z, cmap='viridis', extent=[0, 10, 0, 10], origin='lower')

plt.colorbar(label='振幅')

plt.show()

2. 图例 (Legend)

plt.plot(x, np.sin(x), label='sin(x)')

plt.plot(x, np.cos(x), label='cos(x)')

plt.legend(loc='upper right', fontsize=12)

3. 三维绘图

说明:Axes3D 是通过 projection='3d' 隐式调用。fig.add_subplot(111, projection='3d') 这行代码会隐式地创建一个 3D 坐标系,而这个 3D 坐标系的实现依赖于 mpl_toolkits.mplot3d.Axes3D

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

x = np.linspace(-5, 5, 100)

y = np.linspace(-5, 5, 100)

X, Y = np.meshgrid(x, y)

Z = np.sin(np.sqrt(X**2 + Y**2))

ax.plot_surface(X, Y, Z, cmap='viridis')

plt.show()

完整示例

import matplotlib.pyplot as plt

import numpy as np

import matplotlib

# 设置中文字体

matplotlib.rcParams['font.family'] = 'SimHei'

matplotlib.rcParams['font.size'] = 12

# 创建画布

plt.figure(figsize=(10, 6))

# 绘制正弦波

x = np.linspace(0, 2*np.pi, 100)

y = np.sin(x)

plt.plot(x, y, 'b-', label='sin(x)', linewidth=2)

# 绘制余弦波

y = np.cos(x)

plt.plot(x, y, 'r--', label='cos(x)', linewidth=2)

# 添加标题和标签

plt.title('正弦波与余弦波', fontsize=16)

plt.xlabel('角度 (弧度)', fontsize=14)

plt.ylabel('振幅', fontsize=14)

# 添加图例

plt.legend(loc='upper right', fontsize=12)

# 添加网格

plt.grid(True, linestyle='--', alpha=0.5)

# 添加文本注释

plt.text(4, 0.5, r'$\sin(x) = \cos(x - \frac{\pi}{2})$', fontsize=14)

# 设置坐标轴范围

plt.xlim(0, 2*np.pi)

plt.ylim(-1.2, 1.2)

# 保存图片

plt.savefig('sine_cosine.png', dpi=300, bbox_inches='tight')

# 显示图形

plt.show()

参考文献

Matplotlib 官方文档

Matplotlib 中文文档

标签:subplot,plot,plt,基础,matplotlib,fontsize,使用,np,sin
From: https://blog.csdn.net/yuange1666/article/details/145065163

相关文章

  • 【Ubuntu 无法使用ifconfig解决办法】
    【Ubuntu无法使用ifconfig解决办法】 Ubuntu无法使用ifconfig解决办法在使用ubuntu时需要使用ifconfig命令提示Command'ifconfig'notfound,didyoumean: command'iconfig'fromdebipmiutil(3.1.5-1)  command'pifconfig'fromdebpython3-ethtool(0.14-3......
  • 从入门到精通:Java 基础语法全解析,快速掌握核心编程技能
    系列文章目录01-从入门到精通:Java基础语法全解析,快速掌握核心编程技能文章目录系列文章目录前言一、Java的基本语法规则1.1Java程序结构1.1.1代码解析1.1.2Java的基本语法规则1.2Java的代码风格和规范二、变量与数据类型2.1变量的定义与使用2.1.1变量的声......
  • MySQL备份工具mydumper下载(RPM方式)安装以及详细使用教程
    1、mydumper工具介绍        mydumper是一款社区开源的,用于MySQL数据库的高性能多线程备份工具。与传统的mysqldump相比,mydumper提供了更快的备份和恢复速度,特别是在处理大型数据库时。它包含两个主要工具:•mydumper:负责导出一致的MySQL数据库备份。•myl......
  • 【详解】使用Metasploit实现基于SEH的缓冲区溢出攻击
    目录使用Metasploit实现基于SEH的缓冲区溢出攻击引言环境准备工具与环境安装Metasploit漏洞分析1.确定漏洞点2.触发SEH覆盖利用Metasploit进行攻击1.启动Metasploit2.选择模块3.设置参数4.生成payload5.设置监听器6.执行攻击验证攻击效果SEH溢出基本......
  • MySQL不使用子查询的原因
    MySQL不使用子查询的原因及优化案例目录MySQL不使用子查询的原因及优化案例目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EXISTS优化子查询案例3:使用JOIN代替子查询案例4:优化子查询以减少数据量案例5:使用索引覆盖案例6:使用......
  • 基础命令
    步驟序号步骤说明详细解答3镜像制作35启动容器56组建集群67批量停止73dockerbuild--no-cache--networkhost-tkylin10:proxy_T4-fdockerfile_root_proxy.dockerbuild--no-cache--networkhost-tkylin10:db_T4-fdockerfi......
  • 2024年秋学期 分析力学(理论物理基础Ⅰ)笔记
    内容说明舍去了哈密顿雅可比方程等内容删去了振动相关的一些模型,如参数共振等授课难度疑似过大了一点(毕竟才半个学期),协变相关内容疑似太tm多了有心力场模块笔记有所省略,部分笔记不排除记录有误的可能性部分章节间未换页笔记正文拉格朗日力学及其协变形式......
  • find_package()使用指南
    关于find_package()在使用cmake引用第三方库(比如OpenCV)时,我们总是使用find_package()这个指令来实现对包的查找(比如find_package(OpenCV))。调用完后就可以使用一些似乎凭空出现的变量如${OpenCV_INCLUDE_DIRS}以及${OpenCV_LIBS},分别指示了OpenCV库的头文件路径以及各个库文......
  • mv 命令介绍和使用案例
    mv命令介绍和使用案例mv命令是Linux和Unix系统中用于移动文件和目录的基本命令。它的功能包括重命名文件和目录、将文件或目录从一个位置移动到另一个位置。由于mv命令不会创建文件的副本,因此它被视为“搬家”操作。语法mv[options]sourcedestmv[options]sour......
  • .NET 响应式编程 System.Reactive 系列文章(一):基础概念
    .NET响应式编程System.Reactive系列文章(一):基础概念引言在现代软件开发中,处理异步事件和数据流已经成为常见的需求,比如用户输入、网络请求、传感器数据等。这些数据流通常是无限的、异步的、实时的,而传统的编程方式往往无法优雅地处理这些情况。响应式编程(ReactivePro......