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

news2024/12/29 13:50:47

文章目录

    • 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.coloradmin.cn/o/1400601.html

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

相关文章

Linux:使用for+find查找文件并cp到其他目录,文件名带有空格

一、场景描述 在终端窗口中,用shell命令,批量拷贝文件到指定目录。 我是在Windows系统上,通过git bash终端来执行shell命令的。 二、实现过程 命令1 for filepath in find /d/LearningMaterials/数学/数学/高中/一数/偏基础(基…

Zabbix分布式监控系统概述、部署、自定义监控项、邮件告警

目录 前言 (一)业务架构 (二)运维架构 一、Zabbix分布式监控平台 (一)Zabbix概述 (二)Zabbix监控原理 (三)Zabbix 6.0 新特性 1. Zabbix server高可用…

用BEVformer来卷自动驾驶-4

书接前文 前文链接:用BEVformer来卷自动驾驶-3 (qq.com) 上文书介绍了BEVformer是个啥,以及怎么实现Deformable-attention 我们继续 BEVformer的输入数据格式: 输入张量(batachsize,queue,cam,…

工厂设计模式看这一篇就够了

本文将重点介绍几种工厂设计模式:简单工厂、工厂方法模式、抽象工厂模式和建造者模式。这几种设计模式在生产制造的流程下层层递进,可以满足不同的使用场景。在实际运用时,没有一个万能的工厂模式可以套用,要结合具体业务场景选择…

【华为GAUSS数据库】IDEA连接GAUSS数据库方法

背景:数据库为华为gauss for opengauss 集中式数据库 IDEA提供了丰富的各类型数据库驱动,但暂未提供Gauss数据库。可以通过以下方法进行连接。 连接后, 可以自动检查xml文件中的sql语句是否准确,表名和字段名是否正确还可以直接在…

基于 IoT 物联网 + 5G 技术搭建 100万台电梯智能化运维平台

随着近20年我国房地产的蓬勃发展,电梯已经成为人们现代生活中不可或缺的一部分,也是城市化建设中重要的建筑设备之一。据中国电梯行业协会统计,截至2022年底,我国电梯保有量为990万台,电梯运营健康度,减少事…

Pyro —— Sparse vs dense simulations

目录 Simulation area Sparse solving Understanding resizing Simulation area 在模拟的期间,pyro场都在当前容器内定义;开始非常小,随模拟的进行,解算器会不断的对其扩展或收缩;为重置流体框,解算器会…

Android 基础技术——addView 流程

笔者希望做一个系列,整理 Android 基础技术,本章是关于 addView 在了解 addView 流程之前,先回答下以下几个问题: PhoneWindow是什么时候创建的? DectorView 是什么? DectorView 是什么时候创建的&#xf…

conda国内加速

1、配置国内源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 2、显示源地址 conda config --set show_channel_urls yes

外呼机器人有什么优势?

外呼机器人有什么优势?值得受到大多数电销企业的追捧! 1、电话外呼效率高: 每天可拨打的电话数量是人工的5-10倍,人工一天只能拨打200-300通电话,机器人每天能打3000通电话以上,无须休息,按照…

PWM之舵机

舵机又称直流电机,如下图 本节承接上节,具体的PWM技术已经在上一节讲的很详细了,本节就不再讲了,那么我们的重点就放在直流电机的工作原理上了。 一、工作原理 我们研究直流电机,主要式研究直流电机旋转速度的调节&a…

linux LPT和COM回路测试(基于python+Qt+C++)

软件UI: 回路治具&#xff08;COMLPT&#xff09;&#xff1a; lpt_test.cpp&#xff08;c 源代码&#xff09;&#xff1a; #include <iostream> #include <fstream> #include <sstream> #include <unistd.h> #include <fcntl.h> #include <…

什么是游戏盾?哪家效果好。

游戏盾是什么呢&#xff0c;很多做游戏开发的客户估计都是听说过的&#xff0c;但是也不是所有的游戏开发者会运用到。因为&#xff0c;游戏盾是针对游戏行业APP业务所推出的高度可定制的网络安全管理解决方案&#xff0c;除了能针对大型DDoS攻击(T级别)进行有效防御外&#xf…

Python(18)--文件输入/输出 Ⅱ

​ 大家好&#xff01;我是码银&#x1f970; 欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 前言 前一篇文章&#xff08;python(17)–文件的输入/输出-CSDN博客&#xff09;介绍了如何操作文本文件和二进制文件&#xff0c;以及对应…

设计亚马逊按销售排名功能

1&#xff1a; 定义 Use Cases 和 约束 Use cases 作用域内的Use Case Service 通过目录计算过去一周内最受欢迎的产品User 通过目录去View过去周内最受欢迎的产品Service 有高可用 作用域外 整个电商网站 设计组件&#xff08;只是计算销售排名&#xff09; 约束和假设…

【Python】模块

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

C++ :命名空间域

目录 冲突与命名&#xff1a; 举个例子&#xff1a; 全局与局部&#xff1a; 域作用限定符&#xff1a; 命名空间域&#xff1a; 冲突与命名&#xff1a; 在C语言中&#xff0c;我们通常会使用stdlib.h 而stdlib.h 本质上是一个函数的库&#xff0c;在程序中使用的大多数…

django邮件通知功能-

需求&#xff1a; 1&#xff1a;下单人员下订单时需要向组长和投流手发送邮件通知 2&#xff1a;为何使用邮件通知功能&#xff1f;因为没钱去开通短信通知功能 设计 1&#xff1a;给用户信息表添加2个字段 第一个字段为&#xff1a;是否开通邮件通知的布尔值 第二个字段为: 用…

Python 折线图的绘制(Seaborn篇-04)

Python 折线图的绘制(Seaborn篇-04)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

详解Redisson

第1章&#xff1a;Redisson简介 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Redisson&#xff0c;Redisson不只是简单地对Redis进行了封装&#xff0c;它还提供了一系列高级的分布式Java数据结构&#xff0c;像是分布式锁、原子长整型这种。 首先&#xff0c;Redi…