Matplotlib Mastery: 从基础到高级的数据可视化指南【第30篇—python:数据可视化】

文章目录

    • Matplotlib: 强大的数据可视化工具
      • 1. 基础
        • 1.1 安装Matplotlib
        • 1.2 创建第一个简单的图表
        • 1.3 图表的基本组件:标题、轴标签、图例
      • 2. 常见图表类型
        • 2.1 折线图
        • 2.2 散点图
        • 2.3 条形图
        • 2.4 直方图
      • 3. 图表样式与定制
        • 3.1 颜色、线型、标记的定制
        • 3.2 背景样式与颜色映射
        • 3.3 添加注释与文本
      • 4. 多图表和子图
        • 4.1 创建多个图表
        • 4.2 子图的布局与排列
      • 5. 三维图表
        • 5.1 3D散点图与线图
        • 5.2 3D表面图与曲面图
      • 6. 实际案例:数据可视化项目
      • 7. 高级图表定制
        • 7.1 动画效果
        • 7.2 极坐标图
        • 7.3 自定义颜色映射
      • 8. 高级子图和布局
        • 8.1 网格子图
        • 8.2 非矩形子图
      • 9. 绘制地图和地理数据
      • 结语

Matplotlib: 强大的数据可视化工具

Matplotlib是一个功能强大的数据可视化库,为数据科学家提供了丰富的工具和功能,可以以直观的方式呈现数据。

1. 基础

1.1 安装Matplotlib

在使用Matplotlib之前,请确保已经安装了Matplotlib库。可以使用以下命令进行安装:

pip install matplotlib
1.2 创建第一个简单的图表

安装好Matplotlib后,让我们来创建一个简单的折线图。以下是一个基本的示例:

import matplotlib.pyplot as plt# 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]# 创建折线图
plt.plot(x, y)# 显示图表
plt.show()

通过运行这段代码,我们可以得到一个简单的折线图,其中横轴为x,纵轴为y。

1.3 图表的基本组件:标题、轴标签、图例

在Matplotlib中,我们可以添加图表的基本组件,以提高图表的可读性。以下是一些基本组件的添加示例:

# 添加标题
plt.title('My First Matplotlib Plot')# 添加轴标签
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')# 添加图例
plt.legend(['Line A'])# 显示图表
plt.show()

通过添加标题、轴标签和图例,我们可以使图表更加清晰明了。
在这里插入图片描述

2. 常见图表类型

在数据可视化中,Matplotlib提供了多种图表类型,以满足不同数据展示需求。以下是几种常见的图表类型及其应用:

2.1 折线图

折线图适用于展示数据随时间变化的趋势或比较不同组的趋势。以下是一个折线图的示例:

# 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]# 创建折线图
plt.plot(x, y)# 显示图表
plt.show()
2.2 散点图

散点图适用于观察两个变量之间的关系或发现数据中的聚类或趋势。以下是一个散点图的示例:

# 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]# 创建散点图
plt.scatter(x, y)# 显示图表
plt.show()
2.3 条形图

条形图适用于比较不同类别的数据或显示类别之间的数量差异。以下是一个条形图的示例:

# 数据
categories = ['A', 'B', 'C', 'D']
values = [10, 15, 7, 12]# 创建条形图
plt.bar(categories, values)# 显示图表
plt.show()
2.4 直方图

直方图适用于展示数据的分布或显示数据的频率。以下是一个直方图的示例:

# 数据
data = [2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 8]# 创建直方图
plt.hist(data, bins=5)# 显示图表
plt.show()

通过使用这些常见的图表类型,我们可以更好地理解和传达数据的特征、关系和分布。

3. 图表样式与定制

Matplotlib允许通过定制颜色、线型、标记等来创建个性化的图表。以下是一些图表样式与定制的示例:

3.1 颜色、线型、标记的定制

在这里插入图片描述

# 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]# 定制颜色、线型、标记
plt.plot(x, y, color='green', linestyle='--', marker='o', label='Line A')# 添加图例
plt.legend()# 显示图表
plt.show()
3.2 背景样式与颜色映射
# 数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 定制背景样式与颜色映射
plt.plot(x, y, color='blue')# 设定背景颜色
plt.axes().set_facecolor('lightgray')# 显示图表
plt.show()
3.3 添加注释与文本
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]# 添加注释与文本
plt.plot(x, y, label='Line A')
plt.annotate('Max Value', xy=(5, 10), xytext=(4.5, 8),arrowprops=dict(facecolor='red', shrink=0.05))
plt.text(1, 2, 'Start Point', fontsize=10, color='blue')# 添加图例
plt.legend()# 显示图表
plt.show()

通过这些定制,我们可以使图表更符合审美和需求。

4. 多图表和子图

在Matplotlib中,我们可以创建包含多个子图的图表,以更灵活地展示数据或进行比较。以下是创建多个图表和子图的示例:

4.1 创建多个图表
# 数据
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 2, 1, 2, 1]# 创建第一个图表
plt.figure(1)
plt.plot(x, y1, label='Line A')
plt.title('First Chart')# 创建第二个图表
plt.figure(2)
plt.plot(x, y2, label='Line B')
plt.title('Second Chart')# 显示图表
plt.show()
4.2 子图的布局与排列
# 数据
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 2, 1, 2, 1]# 创建一个包含两个子图的图表
plt.figure(figsize=(10, 4))# 子图1
plt.subplot(1, 2, 1)
plt.plot(x, y1, label='Line A')
plt.title('Subplot 1')# 子图2
plt.subplot(1, 2, 2)
plt.plot(x, y2, label='Line B')
plt.title('Subplot 2')# 调整子图之间的间距
plt.tight_layout()# 显示图表
plt.show()

通过plt.subplot方法,我们可以在一个图表中创建多个子图,并通过指定行数和列数来排列它们。

5. 三维图表

Matplotlib还提供了创建各种三维图表的功能,包括3D散点图、3D线图、3D表面图等。以下是几个示例:
在这里插入图片描述

5.1 3D散点图与线图
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np# 生成随机数据
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)# 创建3D散点图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c='r', marker='o', label='Scatter Points')# 创建3D线图
ax.plot(x, y, z, c='b', label='Line')# 添加标签
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')# 添加图例
ax.legend()# 显示图表
plt.show()
5.2 3D表面图与曲面图
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np# 生成网格数据
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()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')# 添加标签
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')# 显示图表
plt.show()

通过使用mpl_toolkits.mplot3d中的Axes3D,我们可以在Matplotlib中创建三维图表。
在这里插入图片描述

6. 实际案例:数据可视化项目

让我们应用Matplotlib处理一个真实数据集,创建一个独特而有说服力的数据可视化。假设我们有一份包含城市气温和湿度的数据集,我们将通过Matplotlib创建一个多图表的可视化项目:

import matplotlib.pyplot as plt
import numpy as np# 模拟真实数据集
cities = ['City A', 'City B', 'City C']
temperature = [28, 32, 25]
humidity = [60, 45, 75]# 创建多图表
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))# 子图1:气温条形图
ax1.bar(cities, temperature, color=['red', 'blue', 'green'])
ax1.set_title('Temperature in Cities')
ax1.set_ylabel('Temperature (°C)')# 子图2:湿度饼图
ax2.pie(humidity, labels=cities, autopct='%1.1f%%', colors=['gold', 'lightcoral', 'lightskyblue'])
ax2.set_title('Humidity in Cities')# 调整布局
plt.tight_layout()# 显示图表
plt.show()

通过这个实际案例,我们展示了如何使用Matplotlib处理真实数据,创建有说服力的多图表可视化项目。

7. 高级图表定制

Matplotlib提供了丰富的定制选项,使得你能够创造出独特而引人注目的图表。以下是一些高级图表定制的示例:

7.1 动画效果

Matplotlib允许你创建动画效果,以展示随时间变化的数据。以下是一个简单的动画效果示例:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np# 数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)# 初始化图表
fig, ax = plt.subplots()
line, = ax.plot(x, y)# 更新函数
def update(frame):line.set_ydata(np.sin(x + frame/10))return line,# 创建动画
ani = FuncAnimation(fig, update, frames=range(100), interval=50)# 显示动画
plt.show()

这个例子展示了如何使用Matplotlib创建一个简单的正弦波动画。

7.2 极坐标图

Matplotlib支持极坐标图表,适用于展示循环或周期性数据。以下是一个极坐标图的示例:

import matplotlib.pyplot as plt
import numpy as np# 数据
theta = np.linspace(0, 2*np.pi, 100)
r = theta# 创建极坐标图
plt.polar(theta, r)# 显示图表
plt.show()

极坐标图使得展示周期性数据更加直观。

7.3 自定义颜色映射

Matplotlib允许你通过自定义颜色映射,为图表添加更多的信息。以下是一个自定义颜色映射的示例:

import matplotlib.pyplot as plt
import numpy as np# 数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 自定义颜色映射
colors = np.linspace(0, 1, len(x))# 创建图表
plt.scatter(x, y, c=colors, cmap='viridis')# 添加颜色条
plt.colorbar()# 显示图表
plt.show()

通过颜色映射,我们可以在图表中加入更多维度的信息。

8. 高级子图和布局

Matplotlib允许你更灵活地处理子图和布局,以满足复杂的展示需求。以下是一些高级子图和布局的示例:

8.1 网格子图

Matplotlib中的gridspec模块允许你创建更复杂的子图布局。以下是一个网格子图的示例:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np# 数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 创建网格子图
fig = plt.figure(figsize=(8, 6))
gs = gridspec.GridSpec(2, 2, width_ratios=[1, 2], height_ratios=[2, 1])# 子图1
ax0 = plt.subplot(gs[0])
ax0.plot(x, y1)
ax0.set_title('Subplot 1')# 子图2
ax1 = plt.subplot(gs[1])
ax1.plot(x, y2)
ax1.set_title('Subplot 2')# 子图3
ax2 = plt.subplot(gs[2])
ax2.plot(x, y1)
ax2.set_title('Subplot 3')# 子图4
ax3 = plt.subplot(gs[3])
ax3.plot(x, y2)
ax3.set_title('Subplot 4')# 调整布局
plt.tight_layout()# 显示图表
plt.show()

通过gridspec,我们可以精确控制每个子图的位置和大小。

8.2 非矩形子图

Matplotlib支持创建非矩形形状的子图,以适应特

殊需求。以下是一个非矩形子图的示例:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np# 数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 创建图表
fig, ax = plt.subplots()# 创建非矩形子图
rect = patches.Rectangle((2, -0.5), 5, 1, linewidth=1, edgecolor='r', facecolor='none')
ax.add_patch(rect)# 绘制曲线
ax.plot(x, y)# 显示图表
plt.show()

通过matplotlib.patches,我们可以添加非矩形的子图,使得图表更具创意。

9. 绘制地图和地理数据

Matplotlib也支持绘制地图和处理地理数据。以下是一个简单的地图绘制示例:

import matplotlib.pyplot as plt
import geopandas as gpd# 读取地理数据
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))# 创建地图
world.plot()# 显示地图
plt.show()

通过结合Matplotlib和geopandas,我们可以方便地绘制地图和处理地理数据。

结语

Matplotlib作为Python中最流行的数据可视化库之一,提供了丰富的功能和灵活的定制选项。通过学习这些高级功能和技巧,你可以更好地运用Matplotlib,创造出更具表现力和复杂性的数据可视化作品。希望这篇文章能够帮助你更深入地了解Matplotlib,并在数据科学和可视化领域取得更大的成就。

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

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

相关文章

【JavaEE进阶】 MyBatis使用XML实现增删改查

文章目录 🎍前言🍀配置连接字符串和MyBatis🍃写持久层代码🚩添加mapper接⼝🚩添加UserInfoXMLMapper.xml🚩单元测试 🌴增(Insert)🚩返回⾃增id 🎋删(Delete)&…

JAVA_LinkedList添加元素源码分析(jdk17)

目录 先看一些重要的源码: 开始分析: 底层数据结构是双链表,查询慢,首尾操作是极快的,所以多了很多首尾操作的特有 Api: addlast 和 add 一样元素默认添加到末尾,了解即可。 先看一些重要的源…

vue3源码(二)reactiveeffect

一.reactive与effect功能 reactive方法会将对象变成proxy对象&#xff0c; effect中使用reactive对象时会进行依赖收集&#xff0c;稍后属性变化时会重新执行effect函数。 <div id"app"></div><script type"module">import {reactive,…

web开发学习笔记(14.mybatis基于xml配置)

1.基本介绍 2.基本使用 在mapper中定义 在xml中定义&#xff0c;id为方法名&#xff0c;resultType为实体类的路径 在测试类中写 3. 动态sql&#xff0c;if和where关键字 动态sql添加<where>关键字可以自动产生where和过滤and或者or关键字 where关键字可以动态生成whe…

C++面试:跳表

目录 跳表介绍 跳表的特点&#xff1a; 跳表的应用场景&#xff1a; C 代码示例&#xff1a; 跳表的特性 跳表示例 总结 跳表&#xff08;Skip List&#xff09;是一种支持快速搜索、插入和删除的数据结构&#xff0c;具有相对简单的实现和较高的查询性能。下面是跳表…

常用芯片学习——HC244芯片

HC573 三态输出八路缓冲器|线路驱动器 使用说明 SNx4HC244 八路缓冲器和线路驱动器专门设计用于提高三态存储器地址驱动器、时钟驱动器以及总线导向接收器和发送器的性能和密度。SNx4HC244 器件配备两个具有独立输出使能 (OE) 输入的 4 位缓冲器和驱动器。当 OE 为低电平时&a…

【AI视野·今日NLP 自然语言处理论文速览 第七十五期】Thu, 11 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 11 Jan 2024 Totally 36 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Leveraging Print Debugging to Improve Code Generation in Large Language Models Authors Xueyu Hu, Kun K…

php基础学习之代码框架

一&#xff0c;标记 脚本标记&#xff08;已弃用&#xff09;&#xff1a;<script language"php"> php代码 </script> 标准标记&#xff1a;<?php php代码 ?> 二&#xff0c;基础输出语句 不是函数&#xff0c;…

行业分析|中国人工智能发展的优势与差距

​人工智能&#xff0c;被誉为第四次工业革命的催化剂&#xff0c;吸引着发达国家和众多科技公司大举投入研发。我国积极构筑人工智能发展的先发优势&#xff0c;党的二十大报告提出推动战略性新兴产业集群&#xff0c;构建一系列新的增长引擎&#xff0c;包括信息技术、人工智…

QT发送request请求

时间记录&#xff1a;2024/1/23 一、使用步骤 &#xff08;1&#xff09;pro文件中添加network模块 &#xff08;2&#xff09;创建QNetworkAccessManager网络管理类对象 &#xff08;3&#xff09;创建QNetworkRequest网络请求对象&#xff0c;使用setUrl方法设置请求url&am…

MySQL 8.3 发布, 它带来哪些新变化?

1月16号 MySQL 官方发布 8.3 创新版 和 8.0.36 长期支持版本 (该版本 没有新增功能&#xff0c;更多是修复bug )&#xff0c;本文基于 官方文档 说一下 8.3 版本带来的变化。 一 增加的特性 1.1 GTID_NEXT 支持增加 TAG 选项。 之前的版本中 GTID_NEXTUUID:number &#xff…

scrapy框架核心知识Spider,Middleware,Item Pipeline,scrapy项目创建与启动,Scrapy-redis与分布式

scrapy项目创建与启动 创建项目 在你的工作目录下直接使用命令: scrapy startproject scrapytutorial运行后创建了一个名为scrapytutorial的爬虫工程 创建spider 在爬虫工程文件内&#xff0c;运行以下命令&#xff1a; scrapy genspider quotes创建了名为quotes的爬虫 …

超融合系统疑难故障定位与解决实践 3 例(含信创技术栈)

当 IT 系统出现故障&#xff0c;问题定位往往是运维人员最头疼的环节。尤其是超融合系统&#xff0c;由于整体涉及的技术栈比较复杂&#xff0c;且有越来越多的用户基于信创环境进行部署&#xff0c;非常考验厂商和技术人员的专业能力&#xff1a;厂商研发和售后工程师不仅应能…

【C/C++】C/C++编程——C++ 开发环境搭建

C的开发环境种类繁多&#xff0c;以下是一些常见的C 集成开发环境&#xff1a; AppCode &#xff1a;构建与JetBrains’ IntelliJ IDEA 平台上的用于Objective-C&#xff0c;C,C&#xff0c;Java和Java开发的集成开发环境CLion&#xff1a;来自JetBrains的跨平台的C/C的集成开…

天津大数据培训班推荐,数据分析过程的常见错误

大数据”是近年来IT行业的热词&#xff0c;目前已经广泛应用在各个行业。大数据&#xff0c;又称海量信息&#xff0c;特点是数据量大、种类多、实时性强、数据蕴藏的价值大。大数据是对大量、动态、能持续的数据&#xff0c;通过运用分析、挖掘和整理&#xff0c;实现数据信息…

keil5 查看stm32 寄存器的值

1 查看芯片内部寄存器的值&#xff0c;首先是在仿真状态下&#xff0c;首先仿真&#xff0c;程序运行。 2 点击菜单栏的 View -> System viewer &#xff0c;右侧便会出现芯片的所有寄存器(如果没有&#xff0c;需要添加)&#xff0c;点击要查看的寄存器&#xff0c;便会出…

ARM安装与项目结构

1. 安装环境 参考E:\peixunQianrushi\arm\ziliao\FS4412新版&#xff08;学生资料&#xff09;\环境相关资料 这边建议全部默认路径 安装注意事项&#xff1a; 1、在接下来的安装过程中&#xff0c;对于使用win10、win8的操作系统的用户&#xff0c;所有的安装请均以管理员身份…

014-信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

014-信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目 #知识点&#xff1a; 1、JS前端架构-识别&分析 2、JS前端架构-开发框架分析 3、JS前端架构-打包器分析 4、JS前端架构-提取&FUZZ 解决&#xff1a; 1、如何从表现中的JS提取…

pytorch(二)梯度下降算法

文章目录 优化问题梯度下降随机梯度下降 在线性模型训练的时候&#xff0c;一开始并不知道w的最优值是什么&#xff0c;可以使用一个随机值来作为w的初始值&#xff0c;使用一定的算法来对w进行更新 优化问题 寻找使得目标函数最优的权重组合的问题就是优化问题 梯度下降 通…

Canvas-Editor 实现类似 Word 协同编辑

前言 对于word的协同编辑&#xff0c;已经构思很久了&#xff0c;但是没有找到合适的插件。今天推荐基于canvas/svg 的富文本编辑器 canvas-editor&#xff0c;能实现类似word的基础功能&#xff0c;如果后续有更好的&#xff0c;也会及时更新。 Canvas-Editor 效果图 官方文…