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都展现出了其强大的功能和灵活性。希望本文能够对你的学习和工作有所帮助!

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

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

相关文章

Vue平台开发三——项目管理页面

前言 对于多个项目的使用,可能需要进行项目切换管理,所以这里创建一个项目管理页面,登录成功后跳转这个页面,进行选择项目,再进入Home页面展示对应项目的内容。 一、实现效果图预览 二、页面内容 功能1、项目列表展…

常见字符串相关题目

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 目录 14.最长公共前缀 5.最长回文子串 67.二进制求和 43.字符串相乘 14.最长公共前缀 题目: 编写一个函数来查…

网络安全 | F5-Attack Signatures-Set详解

关注:CodingTechWork 创建和分配攻击签名集 可以通过两种方式创建攻击签名集:使用过滤器或手动选择要包含的签名。  基于过滤器的签名集仅基于在签名过滤器中定义的标准。基于过滤器的签名集的优点在于,可以专注于定义用户感兴趣的攻击签名…

LibreChat

文章目录 一、关于 LibreChat✨特点 二、使用LibreChat🪶多合一AI对话 一、关于 LibreChat LibreChat 是增强的ChatGPT克隆:Features Agents, Anthropic, AWS, OpenAI, Assistants API, Azure, Groq, o1, GPT-4o, Mistral, OpenRouter, Vertex AI, Gemi…

基础项目实战——3D赛车(c++)

目录 前言一、渲染引擎二、关闭事件三、梯形绘制四、轨道绘制五、边缘绘制六、草坪绘制七、前后移动八、左右移动​九、曲线轨道​十、课山坡轨道​十一、循环轨道​十二、背景展示​十三、引入速度​十四、物品绘制​十五、课数字路障​十六、分数展示​十七、重新生成​十八、…

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

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

AAPM:基于大型语言模型代理的资产定价模型,夏普比率提高9.6%

“AAPM: Large Language Model Agent-based Asset Pricing Models” 论文地址:https://arxiv.org/pdf/2409.17266v1 Github地址:https://github.com/chengjunyan1/AAPM 摘要 这篇文章介绍了一种利用LLM代理的资产定价模型(AAPM)…

《网络数据安全管理条例》施行,企业如何推进未成年人个人信息保护(下)

文章目录 前言三、全流程推进未成年人个人信息保护1、处理前:未成年人个人信息处理的告知同意2、处理中:加强个人信息处理流程管理3、处理后:落实个人信息保护合规审计四、大型网络平台应每年发布社会责任报告前言 《网数条例》颁布前,我国已针对未成年人个人信息保护陆续…

games101-(5/6)

光栅化 投影完成之后,视图区域被确定在从[-1,1]的单位矩阵中,下一步就是光栅化 长宽比:ratio 垂直的可视角度:fild-of-view 可以看到的y 轴的范围,角度越小 越接近正交投影 屏幕坐标系 、 将多边形转化成像素 显示…

01学习预热篇(D6_正式踏入JVM深入学习前的铺垫)

目录 学习前言 一、虚拟机的结构 1. Java虚拟机参数设置 2. java 堆 3. 出入栈 4. 局部变量表 1> 局部变量的剖析 2> 局部变量的回收 5. 操作数栈 1> 常量入栈指令 2> 局部变量值转载到栈中指令 3> 将栈顶值保存到局部变量中指令 6. 帧数据区 7. 栈…

在亚马逊云科技上用Stable Diffusion 3.5 Large生成赛博朋克风图片(下)

背景介绍 在2024年的亚马逊云科技re:Invent大会上提前预告发布的Stable Diffusion 3.5 Large,现在已经在Amazon Bedrock上线了!各位开发者们现在可以使用该模型,根据文本提示词文生图生成高质量的图片,并且支持多种图片风格生成&…

Redis学习之哨兵二

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

如何把obsidian的md文档导出成图片,并加上文档属性

上篇关于这个插件PKMer_Obsidian 插件&#xff1a;Export Image plugin 一键将笔记转换为图片分享的文章 如何把obsidian的md文档导出成图片&#xff0c;并加上水印-CSDN博客 如何导出图片的时候让文档属性也显示出来&#xff0c;啊啊&#xff0c;这个功能找了一晚上&#xf…

新年祝词(原创)

新年将至&#xff0c;福进万户。 家家团圆&#xff0c;事事顺心。 喜迎财神&#xff0c;多寿添金。 瑞兽迎春&#xff0c;炮竹声起。 趋吉避凶&#xff0c;蛇年大吉。 中华崛起&#xff0c;人人自强。 天下大同&#xff0c;百姓富足。 有情有义&#xff0c;平易近人。 …

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.19 排序革命:argsort的十大高阶用法

1.19 排序革命&#xff1a;argsort的十大高阶用法 目录 #mermaid-svg-Qu8PcmLkIc1pOQJ7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Qu8PcmLkIc1pOQJ7 .error-icon{fill:#552222;}#mermaid-svg-Qu8PcmLkIc1pOQJ…

TensorFlow实现逻辑回归模型

逻辑回归是一种经典的分类算法&#xff0c;广泛应用于二分类问题。本文将介绍如何使用TensorFlow框架实现逻辑回归模型&#xff0c;并通过动态绘制决策边界和损失曲线来直观地观察模型的训练过程。 数据准备 首先&#xff0c;我们准备两类数据点&#xff0c;分别表示两个不同…

Unity git版本管理

创建仓库的时候添加了Unity的.gitignore模版&#xff0c;在这个时候就能自动过滤不需要的文件 打开git bash之后&#xff0c;步骤git版本管理-CSDN博客 如果报错&#xff0c;尝试重新进git 第一次传会耗时较长&#xff0c;之后的更新就很快了

【AI论文】扩散对抗后训练用于一步视频生成总结

摘要&#xff1a;扩散模型被广泛应用于图像和视频生成&#xff0c;但其迭代生成过程缓慢且资源消耗大。尽管现有的蒸馏方法已显示出在图像领域实现一步生成的潜力&#xff0c;但它们仍存在显著的质量退化问题。在本研究中&#xff0c;我们提出了一种在扩散预训练后针对真实数据…

低代码系统-产品架构案例介绍、明道云(十一)

明道云HAP-超级应用平台(Hyper Application Platform)&#xff0c;其实就是企业级应用平台&#xff0c;跟微搭类似。 通过自设计底层架构&#xff0c;兼容各种平台&#xff0c;使用低代码做到应用搭建、应用运维。 企业级应用平台最大的特点就是隐藏在冰山下的功能很深&#xf…

2025年AI手机集中上市,三星Galaxy S25系列上市

2025年被认为是AI手机集中爆发的一年&#xff0c;各大厂商都会推出搭载人工智能的智能手机。三星Galaxy S25系列全球上市了。 三星Galaxy S25系列包含S25、S25和S25 Ultra三款机型&#xff0c;起售价为800美元&#xff08;约合人民币5800元&#xff09;。全系搭载骁龙8 Elite芯…