Python可视化与交互matplotlib库的详细介绍

 更新时间:2025年09月01日 09:51:50   作者:hAnGWS  
matplotlib库是python中绘制二维,三维图表的数据可视化工具,在2D绘图领域使用最广,这篇文章主要介绍了Python可视化与交互matplotlib库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

matplotlib库介绍

matplotlib库是一个非常实用的库,与numpypandas库并称为三大顶级Python库。它可以将matlab中的相当一部分绘图功能迁移到python中,同时,也可以满足一定的交互需求,非常适合可视化的需求。

绘图基本逻辑

先上示例:

import matplotlib.pyplot as plt
import numpy as np

# 画图基本逻辑
## 准备数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

## 创建画布和容器
fig, ax = plt.subplots()

## 绘制图形
ax.plot(x, y)

# 自定义图形
ax.set_title('Sine Wave')   # 设置标题
ax.set_xlabel('x')          # 设置横坐标标签
ax.set_ylabel('sin(x)')     # 设置纵坐标标签
ax.grid(True)               # 显示网格

# 显示图形
plt.show()

该程序运行出来的图如下:

该实例中,整个绘图流程分为了准备数据、创建画布、绘制图形、图形编辑这几个部分。

首先第一部分,准备数据。本示例中利用numpy库创建了一组正弦函数数据,在实际应用中,更多的是从文件中读取数据。

第二部分创建画布,在matplotlib库中,通常把绘制图形分为局部整体两个部分,这是为了满足多图绘制的需求。因为在绘制数据可视化图形中,通常需要绘制譬如多行多列的图形,因此该库中将绘图整体称之为Figure,将每一个绘制的图形称之为Axes,不过需要指明,该单词虽然意为“坐标轴”,但是其功能更贴切于一个容器,表述每一个子图的绘制。在本示例中,由于只进行了单图的绘制,因此,后续绘制只使用了Axes的实例对象ax

第三部分绘制图形,根据提供的数据,选择不同的绘制方式和表现方式,这也是绘制的核心区域。

最后一部分,图形编辑,可以完善图形的相关信息,比如图名、坐标轴名、网格、图例等。

一般处于调试需求,会将最后的图形输出并显示,即plt.show

绘制方式

上图中我们展示了折线图的画法,在matplotlib库中,针对不同数据和表现形式有不同的绘制方式。这里做简单列举。

散点图

x = np.random.rand(100)
y = np.random.rand(100)

fig, ax = plt.subplots()

ax.scatter(x, y)

ax.set_title("Scatter")
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.grid(True)

展示效果为:

柱状图

# 柱状图
categories = ['A', 'B', 'C', 'D', 'E', 'F']
values = [79, 68, 89, 94, 54, 77]

fig, ax = plt.subplots()

ax.bar(categories, values)

ax.set_title("Bar")
ax.set_xlabel("Student")
ax.set_ylabel("Scores")

plt.show()

展示效果为:

直方图

# 直方图
data = np.random.randn(1000)

fig, ax = plt.subplots()

ax.hist(data, bins = 100, color = "green", alpha = 0.75)

ax.set_title("Histogram")
ax.set_xlabel("Value")
ax.set_ylabel("Frequency")
ax.grid(True)

plt.show()

展示效果为:

多子图绘制

上面提及,matplotlib库允许多子图绘制,比如对于一种数据我们可能想要多种表达方式,而这种表达方式不适合放在单图中表示的时候,就需要这种表达。我们可以在subplot()函数中添加参数,以实现这种绘制方式。

# 多子图绘制
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

fig, axs = plt.subplots(1, 2, figsize=(10, 8))

axs[0].plot(x, y1)
axs[0].set_title('sin(x)')
axs[0].set_xlabel('x')
axs[0].set_ylabel('sin(x)')
axs[0].grid(True)

axs[1].plot(x, y2)
axs[1].set_title('cos(x)')
axs[1].set_xlabel('x')
axs[1].set_ylabel('cos(x)')
axs[1].grid(True)

fig.suptitle('sin(x) VS. cos(x)', fontsize = 18)

plt.show()

展示效果为:

本示例中,将正弦函数和余弦函数绘制在同一区域中,可以更好地满足特定情况下的绘制需求。同时,该示例也更好的体现出了FigureAxes的区别。

二维数据绘制

在一些可视化需求中,往往不是简单的数字数据绘制,而是会出现一些二维数据如.grd格式的文件可视化。这里利用GMT工具绘制的.grd文件作为原始数据,通过matplotlib库进行可视化需求,数据格式为netCDF-4。

原图如下:

代码如下:

import matplotlib.pyplot as plt
from netCDF4 import Dataset

## 准备数据
file_path = "C:/Users/hang/Downloads/test.grd"
nc = Dataset(file_path, 'r')
lon = nc.variables['lon'][:]
lat = nc.variables['lat'][:]
z = nc.variables['z'][:]
nc.close()

## 创建画布和容器
fig, ax = plt.subplots(figsize = (10, 8))

## 图形绘制
## pcolormesh是一个用于绘制二维网格数据的函数,能够将数值映射为颜色
mesh = ax.pcolormesh(lon, lat, z, cmap = 'jet', shading = 'auto')

## 图形编辑
cbar = fig.colorbar(mesh, ax = ax)
cbar.set_label('Height', fontsize = 14)
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.grid(True)

plt.show()

同样是几行数据,按照相同的逻辑,即可进行该文件的可视化:

其他用法

matplotlib库提供了相当丰富的可视化工具,同时,也提供了一些有关交互可视化的工具,这部分将于后续单独介绍。

总结

到此这篇关于Python可视化与交互matplotlib库的文章就介绍到这了,更多相关Python matplotlib库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解pandas如何去掉、过滤数据集中的某些值或者某些行?

    详解pandas如何去掉、过滤数据集中的某些值或者某些行?

    这篇文章主要介绍了pandas如何去掉、过滤数据集中的某些值或者某些行?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python爬虫基础之爬虫的分类知识总结

    Python爬虫基础之爬虫的分类知识总结

    来给大家讲python爬虫的基础啦,首先我们从爬虫的分类开始讲起,下文有非常详细的知识总结,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • 详解opencv rtsp 硬件解码

    详解opencv rtsp 硬件解码

    这篇文章主要介绍了opencv rtsp硬件解码的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Python利用PyQT5设置闹钟功能

    Python利用PyQT5设置闹钟功能

    这篇文章主要介绍了通过PyQt5实现设置一个小闹钟的功能,到了设置的时间后可以响起一段音乐来提醒。感兴趣的小伙伴可以跟随小编一起试一试
    2022-01-01
  • Python给图像添加噪声具体操作

    Python给图像添加噪声具体操作

    在本文里我们给大家整理了关于Python如何给图像添加噪声的相关知识点以及操作步骤,需要的朋友们学习下。
    2019-03-03
  • Django的HttpRequest和HttpResponse对象详解

    Django的HttpRequest和HttpResponse对象详解

    这篇文章主要介绍了Django的HttpRequest和HttpResponse对象,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Numpy之random.randint产生随机整数方式

    Numpy之random.randint产生随机整数方式

    这篇文章主要介绍了Numpy之random.randint产生随机整数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Python Pillow.Image 图像保存和参数选择方式

    Python Pillow.Image 图像保存和参数选择方式

    今天小编就为大家分享一篇Python Pillow.Image 图像保存和参数选择方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python创建与遍历List二维列表的方法

    python创建与遍历List二维列表的方法

    这篇文章主要介绍了python创建与遍历List二维列表的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • python实现简单石头剪刀布游戏

    python实现简单石头剪刀布游戏

    这篇文章主要介绍了python实现简单石头剪刀布游戏,相信大家在童年或者生活中都玩过石头剪刀布这个游戏,这个游戏需要两个及以上的人。而今天,网上也实现了石头剪刀布的游戏。通过初步学习python,也学会了如何编写这个游戏。下面一起来看看详细内容吧
    2021-10-10

最新评论