【科研绘图】Matplotlib 教学

news2024/11/26 13:47:17

以下是一个针对 Matplotlib 教学 的博客结构,按照分步骤教学方式撰写,以帮助读者从基础到高级逐步掌握 Matplotlib。


Matplotlib 教学:从基础到进阶绘图

Matplotlib 是 Python 中功能强大的数据可视化库,可以用来绘制多种类型的图表,如折线图、散点图、柱状图等。本博客将带你从基础设置到高级技巧,逐步掌握 Matplotlib 的使用。


目录

  • Matplotlib 教学:从基础到进阶绘图
    • 1. Matplotlib 简介与安装
      • 什么是 Matplotlib?
      • 安装 Matplotlib
    • 2. Matplotlib 基础:画出你的第一个图
      • 导入库并创建简单折线图
    • 3. 调整图像样式:标题、坐标轴和标记
      • 添加标题和坐标轴标签
      • 设置刻度标记
      • 调整线条样式
      • 绘制网格图
    • 4. 绘制多种图表类型
      • 4.1 折线图
      • 4.2 散点图
      • 4.3 柱状图
      • 4.4 饼图
    • 5. 子图布局:subplots 的使用
      • 使用 `subplot`
      • 使用 `subplots`
    • 6. 高级技巧:颜色映射与3D图
      • 颜色映射
      • 常用的颜色映射:
      • 绘制 3D 图
    • 7. 保存图表与输出优化
      • 保存图表
      • 优化输出
    • 8. 总结与资源推荐
      • 总结
      • 推荐资源


1. Matplotlib 简介与安装

什么是 Matplotlib?

Matplotlib 是 Python 中最流行的数据可视化库之一,特别适合静态图表绘制。它有着灵活的 API,可以轻松实现定制化的图表。

安装 Matplotlib

你可以通过以下命令安装 Matplotlib:

pip install matplotlib

安装完成后,我们就可以开始绘图了。


2. Matplotlib 基础:画出你的第一个图

导入库并创建简单折线图

绘图的核心是 pyplot 模块,我们用它绘制图表:

import matplotlib.pyplot as plt

# 数据
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]

# 绘图
plt.plot(x, y)

# 添加标题和标签
plt.title("Simple Line Plot")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")

# 显示图像
plt.show()

运行后会显示一张简单的折线图。
在这里插入图片描述


3. 调整图像样式:标题、坐标轴和标记

一个好的图表需要清晰的标题和标记,以下是如何调整样式的例子。

添加标题和坐标轴标签

plt.title("Square Numbers", fontsize=20)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

设置刻度标记

可以通过 tick_params() 自定义刻度标记的样式:

参数名称功能描述示例值
axis指定修改哪一个轴的刻度:'x''y''both''both'
labelsize设置刻度标签字体的大小12
direction设置刻度的方向:'in'(向内)、'out'(向外)或 'inout''in'
length设置刻度线的长度6
width设置刻度线的宽度2
colors设置刻度和刻度标签的颜色'purple'
grid_color设置网格线的颜色'blue'
grid_alpha设置网格线的透明度0.5

以下列为例:

plt.tick_params(axis='both', labelsize=12, direction='in', length=6, width=2, colors='purple')

运行效果
代码运行后,你将看到一张带有以下刻度样式的折线图:

  • 刻度线向内 (direction=‘in’)。
  • 刻度线长度为 6,宽度为 2 (length=6, width=2)。
  • 刻度线和刻度标签为紫色 (colors=‘purple’)。
  • 刻度标签字体大小为 12 (labelsize=12)。

在这里插入图片描述

调整线条样式

可以通过参数自定义线条颜色、样式和宽度:

plt.plot(x, y, color='red', linewidth=2, linestyle='--')

在这里插入图片描述

绘制网格图

plt.tick_params(grid_color='blue', grid_alpha=0.5, axis='both', labelsize=12, direction='in', length=6, width=2, colors='purple')

参数介绍:

  • grid_color 设置网格线的颜色 ‘blue’
  • grid_alpha 设置网格线的透明度 0.5

启动网格图绘制:

plt.grid(True)

在这里插入图片描述


4. 绘制多种图表类型

4.1 折线图

折线图是最基本的图表,用于展示趋势:

plt.plot(x, y, label='Line')
plt.legend()

4.2 散点图

用于显示点与点之间的关系:

plt.scatter(x, y, s=100, c='blue', alpha=0.5)

其中s=100表示散点图中点的面积大小。

4.3 柱状图

展示分类数据的分布:

plt.bar(['A', 'B', 'C'], [5, 7, 9], color='purple')

4.4 饼图

适合展示比例关系:

plt.pie([20, 30, 50], labels=['A', 'B', 'C'], autopct='%1.1f%%')

5. 子图布局:subplots 的使用

在一个画布中绘制多张图表,可以使用 plt.subplot()plt.subplots()

使用 subplot

plt.subplot(121)  # 创建第1个子图(1行2列中的第1个图)
plt.plot(x, y)

plt.subplot(122)  # 创建第2个子图
plt.scatter(x, y)
plt.show()

使用 subplots

更灵活的子图方法:

fig, ax = plt.subplots(2, 2)  # 创建2行2列的子图
ax[0, 0].plot(x, y)
ax[1, 1].scatter(x, y)
plt.show()

6. 高级技巧:颜色映射与3D图

颜色映射

使用 cmap 创建渐变色散点图:

plt.scatter(x, y, c=y, cmap='viridis', s=50)
plt.colorbar()

常用的颜色映射:

Matplotlib 提供了多种内置的颜色映射,可以通过 cmap 参数设置。以下是几种常见的颜色映射:

  • viridis:一种渐变色映射,从黄色到紫色,适用于展示数值范围。
  • plasma:从黄色到紫红色的渐变色,比 viridis 更加鲜艳。
  • inferno:从黑色到亮黄色的颜色映射,非常适合暗背景的图表。
  • coolwarm:从蓝色到红色的渐变,常用于展示具有正负值对比的场景。
  • jet:经典的彩虹色映射,但在视觉上不如 viridis 清晰。
  • cividis:一种色盲友好的颜色映射。

你可以尝试不同的 cmap 参数来查看不同颜色映射的效果。例如:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)  # x 是 0 到 10 之间 100 个等差数列
y = np.sin(x)  # y 是 x 的正弦函数

# 自定义函数用于创建散点图
def create_scatter_plot(ax, x, y, cmap, title):
    scatter = ax.scatter(x, y, c=y, cmap=cmap, s=20)
    ax.set_xlabel(title)
    plt.colorbar(scatter, ax=ax)

# 创建2行3列的子图
fig, axs = plt.subplots(2, 3, figsize=(15, 10))

# 色图列表
colormaps = ['viridis', 'plasma', 'cividis', 'coolwarm', 'jet', 'Greys']

# 遍历每个子图和色图
for ax, cmap in zip(axs.flatten(), colormaps):
    create_scatter_plot(ax, x, y, cmap, cmap)
'''
其中 axs.flatten() 
将二维的 axes 数组展平为一维数组,使得你可以像访问普通列表一样,访问每个子图。
'''

# 设置子图间距
plt.tight_layout()

# 显示图形
plt.show()

在这里插入图片描述

绘制 3D 图

通过 mpl_toolkits.mplot3d 模块:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

# 生成数据
x = np.linspace(0, 30, 300)  # x 是 0 到 30 之间 300 个等差数列
y = np.sin(x)  # y 是 x 的正弦函数
z = np.cos(x)  # z 是 x 的余弦函数

# 创建图形对象
fig = plt.figure(figsize=(10, 8))  # 设置图形大小
ax = fig.add_subplot(111, projection='3d')

# 绘制散点图,设置点的颜色映射
sc = ax.scatter(x, y, z, c=z, cmap='coolwarm', s=50, alpha=0.7, edgecolors='w')

# 设置坐标轴标签
ax.set_xlabel('X', fontsize=14, color='darkblue')
ax.set_ylabel('Y', fontsize=14, color='darkblue')
ax.set_zlabel('Z', fontsize=14, color='darkblue')

# 设置标题
ax.set_title('3D Scatter Plot of sin(x) and cos(x)', fontsize=16, color='darkred')

# 添加颜色条
cbar = plt.colorbar(sc)
cbar.set_label('Cosine Values (Z)', fontsize=12)

# 调整视角
ax.view_init(elev=30, azim=60)  # 设置视角(高度、方位角)

# 增加网格
ax.grid(True, linestyle='--', color='gray', alpha=0.5)

# 显示图形
plt.show()

在这里插入图片描述


7. 保存图表与输出优化

保存图表

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

优化输出

  • 设置更高的 DPI 提高分辨率。
  • 使用 bbox_inches='tight' 去除多余边框。

8. 总结与资源推荐

总结

Matplotlib 是一个功能强大的工具,本教程介绍了从基础到高级的用法。建议大家多动手练习,逐步掌握每个模块。

推荐资源

  • Matplotlib 官方文档
  • 《Python 数据可视化之美》

希望你喜欢本次的 Matplotlib 教学博客!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络系统管理】2023年全国职业院校技能大赛:组策略--10套题组合--4

16、只有域管理员和IT部门员工可以登陆服务器 (1)计算机配置\策略\Windows设置\安全设置\本地策略\用户权限分配 17、创建ChinaSkills23为GPO管理员,加入到企业管理、域控管理员组 (1)gpmc.msc\林\域\%domain%--在这个域中创建GPO 18、为所有域用户设置漫游文件 (1)用…

钉钉授权登录

一.找开钉钉开发平台【钉钉开放平台 (dingtalk.com)】 二。点击菜单【应用开发】->左边【钉钉应用】->【创建应用】 三。创建应用-》保存成功后,点击自己【新建的应用】,进入详细页面 四。进入应用详细页面。左边【分享设置】 注意:进…

应用系统开发(14) 涡流检测系统硬件设计

涡流检测整体系统架构 涡流检测系统整体结构如上图 所示,DAC 转换与功率放大电路将数字正弦信号转 换为模拟正弦信号,为涡流探头提供正弦激励。互感式探头由两个线圈组成,一个作为 激励,另一个接收检测信号,AD 转换电路将传感器探头感应到的电压滤波放大,将电 压值调整到…

介绍一下strupr(arr);(c基础)

hi , I am 36 适合对象c语言初学者 strupr(arr)&#xff1b;函数是把arr数组变为大写字母 格式 #include<string.h> strupr(arr); 返回值为arr 链接分享一下arr的意义(c基础)(必看)(牢记)-CSDN博客 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #incl…

人工智能之数学基础:向量的基本知识

本文重点 向量的基本性质是线性代数和向量空间理论的核心,它们为向量运算提供了坚实的基础,并在物理、工程、计算机图形学等领域有着广泛的应用。本文对向量的一些基本知识进行介绍,帮助大家快速理解向量。 向量的定义与表示 向量是一个既有大小又有方向的量,通常用带箭…

Redis中的zset底层实现

文章目录 Redis中的zset底层实现一、引言二、zset的底层实现1、ziplist编码1.1、代码示例 2、skiplist编码2.1、代码示例 三、总结 Redis中的zset底层实现 一、引言 Redis的有序集合&#xff08;zset&#xff09;是一种非常强大的数据结构&#xff0c;它不仅能够存储元素&…

TSmaster CAN/CANFD 诊断(Diagnostic_CAN)

文章目录 1、Diagnostic TP 参数配置1.1 传输层参数&#xff1a;1.2 服务层参数1.3 Seed&Key 2、基础诊断配置2.1 添加/删除 服务2.2 配置 BasicDiagnostic 服务参数 3、诊断控制台4、自动诊断流程4.1 流程用例管理4.2 配置诊断流程&#xff08;UDS Flow&#xff09;4.2.1 …

大语言模型---LoRA中损失值的计算

文章目录 概要损失计算流程小结 概要 Llama-7B模型的LoRA微调训练中&#xff0c;通过使用Cross-Entropy Loss来度量模型输出的预测分布和真实标签分布之间的距离&#xff0c;来衡量模型的准确性。 本文主要介绍LoRA中损失值的计算流程。 Cross-Entropy Loss作用&#xff1a;是…

Linux笔记--基于OCRmyPDF将扫描件PDF转换为可搜索的PDF

1--官方仓库 https://github.com/ocrmypdf/OCRmyPDF 2--基本步骤 # 安装ocrmypdf库 sudo apt install ocrmypdf# 安装简体中文库 sudo apt-get install tesseract-ocr-chi-sim# 转换 # -l 表示使用的语言 # --force-ocr 防止出现以下错误&#xff1a;ERROR - PriorOcrFoundE…

使用 Nginx 在 Ubuntu 22.04 上安装 LibreNMS 开源网络监控系统

#LibreNMS 是一个功能强大的开源网络监控系统&#xff0c;它能够为你的网络性能和设备提供全面的监控。本文将引导你通过一系列步骤&#xff0c;在 Ubuntu 22.04 服务器上安装和配置 LibreNMS&#xff0c;使用 Nginx 作为 Web 服务器。 简介 LibreNMS 提供了对网络设备和性能…

elementUI非常规数据格式渲染复杂表格(副表头、合并单元格)

效果 数据源 前端代码 (展示以及表格处理/数据处理) 标签 <el-table :data"dataList" style"width: 100%" :span-method"objectSpanMethod"><template v-for"(item, index) in headers"><el-table-column prop"…

使用脚本实现hadoop-yarn-flink自动化部署

本文使用脚本实现hadoop-yarn-flink的快速部署&#xff08;单机部署&#xff09;。 环境&#xff1a;①操作系统&#xff1a;CentOS 7.6&#xff1b;②CPU&#xff1a;x86&#xff1b;③用户&#xff1a;root。 1.前置条件 把下面的的脚本保存到“pre-install.sh”文件&#x…

Linux系统编程之进程基础知识

概述 在Linux系统中&#xff0c;进程是指一个正在运行的程序实例。每个进程都有一个唯一的进程标识符&#xff0c;即PID&#xff0c;操作系统通过这个PID来唯一识别和管理各个进程。进程不仅仅是程序代码的运行实例&#xff0c;它还包含了程序运行时所需的各种资源&#xff0c;…

H.264/H.265播放器EasyPlayer.js网页全终端安防视频流媒体播放器关于iOS不能系统全屏

在数字化时代&#xff0c;流媒体播放器已成为信息传播和娱乐消遣的主流载体。随着技术的进步&#xff0c;流媒体播放器的核心技术和发展趋势不断演变&#xff0c;影响着整个行业的发展方向。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持…

【数据结构】二叉树的建立与遍历

1.二叉树 1.1 二叉树的定义 首先先来回顾一下什么是二叉树&#xff1a; 二叉树&#xff08;binary tree&#xff09;是指树中节点的度不大于2的有序树&#xff0c;它是一种最简单且最重要的树。二叉树的递归定义为&#xff1a;二叉树是一棵空树&#xff0c;或者是一棵由一个根…

51单片机基础 06 串口通信与串口中断

目录 一、串口通信 二、串口协议 三、原理图 四、串口通信配置参数 1、常用的串行口工作方式1 2、数据发送 3、数据接收 4、波特率计算 5、轮询接收 6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式&#xff0c;广泛用于计算机与外部设备或嵌入式系统之间…

智慧环保大数据解决方案

1. 智慧环保概述 智慧环保是“数字环保”的延伸&#xff0c;借助物联网技术整合环境监控对象&#xff0c;通过云计算实现环境管理与决策的智能化。其核心在于快速感知城市环境指标&#xff0c;保障人体健康与生命安全。 2. 智慧环保总体目标 智慧环保的总体目标是建立全面感…

如何使用identify_debugger去抓取信号

含有identify抓取信号的fpga版本做好了&#xff0c;那如何使用他去抓取信号呢&#xff1f; 1.terminal打开identify_debugger&#xff0c;直接这个命令identify_debugger&#xff0c;前提是你安装了synopsys的synaplify的软件&#xff0c;一般做芯片的都会有的哈。 2.打开界面后…

从 Llama 1 到 3.1:Llama 模型架构演进详解

编者按&#xff1a; 面对 Llama 模型家族的持续更新&#xff0c;您是否想要了解它们之间的关键区别和实际性能表现&#xff1f;本文将探讨 Llama 系列模型的架构演变&#xff0c;梳理了 Llama 模型从 1.0 到 3.1 的完整演进历程&#xff0c;深入剖析了每个版本的技术创新&#…

windows基础

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…