Python Matplotlib库:从入门到精通

Python Matplotlib库:从入门到精通

在数据分析和科学计算领域,可视化是一项至关重要的技能。Matplotlib作为Python中最流行的绘图库之一,为我们提供了强大的绘图功能。本文将带你从Matplotlib的基础开始,逐步掌握其高级用法,通过具体的代码示例和详细说明,让你轻松实现数据可视化。

1. Matplotlib图表的主要组成部分

Matplotlib图表主要由以下几个部分组成:

  1. Figure:整个图形,可以把它理解成一张画布,包括了所有的元素,比如标题、轴线等。
  2. Axes:绘制2D图像的实际区域,也称为轴域区,或者绘图区。
  3. Axis:指坐标系中的垂直轴与水平轴,包含轴的长度大小、轴标签和刻度标签。
  4. Artist:画布上所有元素都属于Artist对象,比如文本对象(title、xlabel、ylabel)、Line2D对象(用于绘制2D图像)等。

在开始绘图之前,首先需要安装Matplotlib库。如果尚未安装,可以使用以下命令进行安装:

pip install matplotlib

2. 基础图表绘制

2.1 折线图(Line Plot)

折线图用于显示数据随时间或其他连续变量的变化趋势。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib

# 指定默认字体为支持中文的字体,例如 SimHei
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题

# 创建示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 创建一个图形
plt.figure(figsize=(10, 6))

# 绘制线图
plt.plot(x, y1, label='正弦', color='red', linewidth=2)
plt.plot(x, y2, label='余弦', color='blue', linewidth=2, linestyle='--')

# 添加标题和标签
plt.title('正弦和余弦函数')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()  # 显示图例
plt.grid(True)  # 显示网格

plt.show()

请添加图片描述

2.2 散点图(Scatter Plot)

散点图用于显示两个变量之间的关系。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)

# 绘制散点图
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')
plt.colorbar(label='颜色强度')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('散点图示例')

plt.show()

请添加图片描述

3. 多子图绘制

在同一个窗口中绘制多个子图是一个常见需求。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 32]

# 创建2x2的子图
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(12, 8))

# 子图1: 柱状图
ax1.bar(categories, values)
ax1.set_title('柱状图')

# 子图2: 折线图
ax2.plot(categories, values, 'r-o')
ax2.set_title('折线图')

# 子图3: 散点图
ax3.scatter(categories, values)
ax3.set_title('散点图')

# 子图4: 饼图
ax4.pie(values, labels=categories, autopct='%1.1f%%')
ax4.set_title('饼图')

# 调整子图间距
plt.tight_layout()
plt.show()

请添加图片描述

4. 统计图表绘制

4.1 直方图(Histogram)

直方图用于显示数据的分布情况。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
np.random.seed(42)
data = np.random.randn(1000)

# 创建一个图形,包含多个子图
fig = plt.figure(figsize=(15, 5))

# 子图1: 直方图
plt.subplot(131)
plt.hist(data, bins=30, alpha=0.7, color='blue')
plt.title('直方图')
plt.xlabel('值')
plt.ylabel('频次')

# 后续可添加箱线图和小提琴图等统计图表...

plt.tight_layout()
plt.show()

请添加图片描述

4.2 箱线图(Boxplot)和小提琴图(Violinplot)

箱线图和小提琴图也是常用的统计图表,用于展示数据的分布特征。

# 接着上面的代码,继续添加箱线图和小提琴图

# 子图2: 箱线图
plt.subplot(132)
plt.boxplot(data)
plt.title('箱线图')

# 子图3: 小提琴图
plt.subplot(133)
plt.violinplot(data)
plt.title('小提琴图')

plt.tight_layout()
plt.show()

请添加图片描述

5. 高级绘图技巧

5.1 3D图表绘制

Matplotlib还支持3D图表的绘制。

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

# 创建数据
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))

# 创建3D图形
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# 绘制3D曲面
surface = ax.plot_surface(X, Y, Z, cmap='viridis')
fig.colorbar(surface)
ax.set_title('3D曲面图')

plt.show()

请添加图片描述

6. 实战案例:数据分析可视化

以下是一个实际的数据分析可视化案例,用于展示Matplotlib的实用性。

import matplotlib.pyplot as plt
import numpy as np

# 创建销售数据
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales_a = [100, 120, 140, 130, 150, 160]
sales_b = [90, 110, 130, 140, 145, 155]

# 创建组合图表
fig, ax1 = plt.subplots(figsize=(10, 6))

# 绘制柱状图
x = np.arange(len(months))
width = 0.35
ax1.bar(x - width/2, sales_a, width, label='产品A', color='skyblue')
ax1.bar(x + width/2, sales_b, width, label='产品B', color='lightgreen')

# 设置坐标轴
ax1.set_xticks(x)
ax1.set_xticklabels(months)
ax1.set_ylabel('销售量')
ax1.set_title('月度销售对比')
ax1.legend()

# 添加数据标签
for i, v in enumerate(sales_a):
    ax1.text(i - width/2, v, str(v), ha='center', va='bottom')
for i, v in enumerate(sales_b):
    ax1.text(i + width/2, v, str(v), ha='center', va='bottom')

plt.show()

请添加图片描述

7. 设置中文

在使用 Matplotlib 显示汉字时,需要进行一些设置以确保汉字能够正确显示。以下是一些关键步骤:

  1. 设置字体
    Matplotlib 默认不支持中文字符,因此需要指定一个支持中文的字体。常见的中文支持字体有“SimHei”(黑体)、“SimSun”(宋体)等。你可以通过设置 rcParams 来指定字体。

  2. 确保字体文件存在
    指定的字体必须存在于你的系统中。在某些操作系统(如 Linux)上,可能需要手动安装相应的字体。

  3. 代码示例
    下面是一个简单的示例代码,展示如何在 Matplotlib 中显示汉字:

import matplotlib.pyplot as plt
import matplotlib

# 指定默认字体为支持中文的字体,例如 SimHei
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题

# 示例数据
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]

# 创建图表
plt.figure()
plt.plot(x, y)
plt.title('示例图表')
plt.xlabel('横轴标签')
plt.ylabel('纵轴标签')

# 显示图表
plt.show()
  1. 其他字体设置
    如果你的系统中没有 SimHei 字体,或者你想使用其他字体,可以指定字体文件的路径。例如:
from matplotlib.font_manager import FontProperties

# 指定字体文件路径
font_path = '/path/to/your/chinese/font.ttf'  # 替换为你的字体文件路径
font = FontProperties(fname=font_path)

# 使用指定的字体创建文本
plt.text(2, 20, '使用指定字体显示的汉字', fontproperties=font)
  1. 保存图表时显示汉字
    当保存图表为图片文件时,同样需要确保字体设置正确。上面的 rcParams 设置已经涵盖了这一点,但如果你使用的是其他保存方法,确保字体设置一致。
# 保存图表
plt.savefig('example_chart.png')

通过本文的介绍,相信你已经对Matplotlib有了全面的了解,并能够运用它来实现各种数据可视化需求。从基础图表到高级绘图技巧,再到实战案例,Matplotlib都展现出了其强大的功能和灵活性。希望本文能够对你的学习和工作有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xclode版本

直接搜xcode https://developer.apple.com/download/all/?qCommand%20Line%20Tools https://developer.apple.com/download/all/?qXcode https://xcodereleases.com/?q10.15 下载可能慢 catalina 支持 11.3.1xcode

Formality:时序变换(二)(不可读寄存器移除)

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 一、引言 时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、寄存器合并(Register Merging)、…

AI作画提示词:Prompts工程技巧与最佳实践

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于物联网智能项目之——智能家居项目…

Python动量策略实战:大幅跑赢市场的底层逻辑

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:最近我深入研究了一种基于动量策略的量化投资方法,并用Python实现了它。动量策略的核心是“追涨杀跌”,通过历史数据预测未来趋势。在这篇文章中&#…

【Proteus仿真】【51单片机】多功能计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、加减乘除,开方运算 4、带符号运算 5、最大 999*999 二、使用步骤 基于51单片机多功能计算器 包含:程序&…

链表的介绍

目录 引言优缺点与链表相似的数据结构注意事项单向链表的实现基础实现创建类创建成员变量创建特殊方法 增加数据push_back方法insert方法 删除数据del_back方法del_index方法 clear方法查询数据at方法与重载的中括号运算符toArray方法indexOf方法 修改数据获取链表大小测试方法…

【AIGC学习笔记】扣子平台——精选有趣应用,探索无限可能

背景介绍: 由于近期业务发展的需求,我开始接触并深入了解了扣子平台的相关知识,并且通过官方教程自学了简易PE工作流搭建的技巧。恰逢周会需要准备与工作相关的分享主题,而我作为一个扣子平台的初学者,也想探索一下这…

DeepSeek-R1部署教程(基于Ollama)

虽说在过年,但不能忘了学习。这几天科技圈最火的莫过于deepseek,我抽空也学习一下deepseek的部署过程。 1、下载Ollama并安装 https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe 下载好后双击直接运行。 2、安装deepseek …

jenkins-k8s pod方式动态生成slave节点

一. 简述: 使用 Jenkins 和 Kubernetes (k8s) 动态生成 Slave 节点是一种高效且灵活的方式来管理 CI/CD 流水线。通过这种方式,Jenkins 可以根据需要在 Kubernetes 集群中创建和销毁 Pod 来执行任务,从而充分利用集群资源并实现更好的隔离性…

力扣面试150 快乐数 循环链表找环 链表抽象 哈希

Problem: 202. 快乐数 👩‍🏫 参考题解 Code public class Solution {public int squareSum(int n) {int sum 0;while(n > 0){int digit n % 10;sum digit * digit;n / 10;}return sum;}public boolean isHappy(int n) {int slow n, fast squa…

【C++】设计模式详解:单例模式

文章目录 Ⅰ. 设计一个类,不允许被拷贝Ⅱ. 请设计一个类,只能在堆上创建对象Ⅲ. 请设计一个类,只能在栈上创建对象Ⅳ. 请设计一个类,不能被继承Ⅴ. 请设计一个类,只能创建一个对象(单例模式)&am…

LLM 推理

https://www.bilibili.com/video/BV16yqeYhELh/ 大模型推理加速目标:高吞吐、低延迟 TGI vLLM SGLang LMDeploy 商汤 和 上海人工智能实验室 一起开发 缺点 性能对比 分析总结 https://www.bilibili.com/video/BV16yqeYhELh/ 大模型推理加速目标:高吞吐…

UE(UltraEdit) 配置简易C/C++编译运行环境

该类型其他帖子 EmEditor 配置简易C/C 编译运行环境_emeditor 代码运行-CSDN博客 RJ TextEd 配置简易C/C 编译运行环境-CSDN博客 这种配置适合ACM竞赛,即要求不使用现代IDE,又想用一个比较好用、至少支持代码高亮的编辑器。 前提条件 1.Mingw GCC 已…

XSS 漏洞全面解析:原理、危害与防范

目录 前言​编辑 漏洞原理 XSS 漏洞的危害 检测 XSS 漏洞的方法 防范 XSS 漏洞的措施 前言 在网络安全的复杂版图中,XSS 漏洞,即跨站脚本攻击(Cross - Site Scripting),是一类极为普遍且威胁巨大的安全隐患。随着互…

Alfresco Content Services dockerCompose自动化部署详尽操作

Alfresco Content Services docker社区部署文档 Alfresco Content Services简介 Alfresco Content Services(简称ACS)是一款功能完备的企业内容管理(ECM)解决方案,主要面向那些对企业级内容管理有高要求的组织。具体…

LCR 139.训练计划 I

目录 题目过程解法双指针法(两端开始)快慢指针 题目 教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。 过…

AboutDialog组件的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了AlertDialog Widget相关的内容,本章回中将介绍AboutDialog Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的AboutDialog是一种弹出式窗口,和上一章回中介绍的Al…

Redis学习之哨兵二

一、API 1.sentinel masters:展示被监控的主节点状态及相关的统计信息 2.sentinel master <master name>:展示指定的主节点的状态以及相关的统计信息 3.sentinel slaves <master name>:展示指定主节点的从节点状态以及相关的统计信息 4.sentinel sentinels <mas…

03链表+栈+队列(D2_栈)

目录 讲解一&#xff1a;栈 一、基本介绍 二、代码示例 ------------------------------ 讲解二&#xff1a;单调栈 一、基本介绍 二、适用场景 三、情形示例 1. 寻找左边第一个小于它的数 2. 寻找左边第一个小于它的数的下标 3. 寻找右边第一个大于它的数 4. 寻找右…

春晚魔术中的数学知识

蛇年春晚刘谦魔术又和大家普及了一下编程中的冒泡排序法&#xff0c;思考深入一点&#xff0c;它还涉及到群论和组合数学中的一些知识。 游戏规则和操作步骤&#xff0c;任意打乱三种餐具作为初始状态&#xff1a; 1.筷子和左边的东西互换&#xff0c;如果筷子就在左边&#…