详解matplotlib技巧之缩放和投影

 更新时间:2024年01月11日 08:47:23   作者:databook  
我们在使用matplotlib绘制图形时,有两个重要的技巧:一种是 Scale(缩放),一种是Projection(投影),缩放和投影在matplotlib绘图中起着至关重要的作用,它们帮助我们更好地展示和理解数据,本文将详细的给大家介绍这两个技巧,需要的朋友可以参考下

引言

我们在使用matplotlib绘制图形时,有两个重要的技巧:一种是 Scale(缩放),一种是Projection(投影)。

一般来说,Scale是对数据的一个维度进行变换,适当的缩放可以改善图表的视觉效果,使其更加美观和易读。
Projection则是对2个或者2个以上的维度进行变换,一般是将多维数据映射到二维或三维空间中。

缩放投影matplotlib绘图中起着至关重要的作用,它们帮助我们更好地展示和理解数据。

1. Scale - 缩放

缩放是指调整图形的大小,使其适应不同的尺寸或比例。
在可视化时,缩放通常用于确保数据点在图表上正确表示,尤其是在处理大量数据或数据点之间存在显著比例差异时。

matplotlib支持多种缩放方式,比如常见的线性缩放,对数缩放和自定义缩放。

1.1. 线性缩放

线性缩放是默认的缩放方式,数据的值是通过线性变换之后显示在图形的。

我们先构造一个X轴和Y轴比例非线性的图形(y=2^x),比如:

import matplotlib.pyplot as plt
import math

x = list(range(1, 11))
y = [math.pow(2, a) for a in x]

fig = plt.figure(figsize=(6, 6))
ax = plt.subplot(1, 1, 1, aspect=1, xlim=[1, 10])
ax.plot(x, y, marker="o")

plt.show()

显示图形如下:

按照1:1的比例,图形几乎无法查看,改成线性缩放之后:

import matplotlib.pyplot as plt
import math

x = list(range(1, 11))
y = [math.pow(2, a) for a in x]

fig = plt.figure(figsize=(6, 6))
ax = plt.subplot(1, 1, 1, xlim=[1, 10])
ax.set_yscale("linear")  # 这里设置了线性缩放
ax.plot(x, y, marker="o")

plt.show()

线性缩放之后,X:Y的比例自动调整为1:200

1.2. 对数缩放

上面的例子中,X 和 Y 的关系是指数关系,所以,我们改成对数缩放,
看看和线性缩放的显示有什么不同。
只需修改一行代码:

ax.set_yscale("log")  # 设置对数缩放

显示效果变成如下这样:

1.3. 自定义缩放

除了使用matplotlib为我们内置的缩放函数,我们也可以自定义缩放函数。
定义缩放函数,就是定义2个的函数:

import numpy as np

def forward(x):
    return np.power(2, x)

def inverse(x):
    return np.log2(x)

然后用我们自定义的缩放函数来再次试试 y=2^x的图形。

x = list(range(1, 11))
y = [math.pow(2, a) for a in x]

fig = plt.figure(figsize=(6, 6))
ax = plt.subplot(1, 1, 1, xlim=[1, 10])
ax.set_xscale('function', functions=(forward, inverse))
ax.plot(x, y, marker="o")

plt.show()

显示的效果如下:

2. Projection - 投影

投影是多个维度的变换,在数据可视化中,通常用于展示高维数据集的低维表示,帮助人们理解数据的结构和模式。

2.1. 坐标系转换

投影的一个常用的应用场景是不同坐标系之间的转换,matplotlib绘图时,常用的坐标系是笛卡尔坐标系极坐标系
笛卡尔坐标系在几何、物理学和计算机图形学等领域中广泛应用,因为它可以方便地描述平面上的任意一点。
然而,对于描述圆形和对称图形,极坐标系可能更为简洁。

下面的示例中,就是同样的一份数据投影在两种坐标系下情况。

x = list(range(1, 11))
y = x

fig = plt.figure(figsize=(12,6))
ax1 = plt.subplot(1,2,1, aspect=1, xlim=[1,10], ylim=[1, 10], projection='polar')
ax1.plot(x, y, marker="o")

ax2 = plt.subplot(1,2,2, aspect=1, xlim=[1,10], ylim=[1, 10])
ax2.plot(x, y, marker="o")

plt.show()

2.2. 3D 投影

投影另一个重要的作用就是转换数据的维度,良好的投影应该能够保留数据的重要特征,同时减少信息的损失。
下面的示例来自matplotlib的官方文档,
它把三维的图形的任意两个维度投影到不同的平面上,可以更好的观察三维的图形的特性。

from mpl_toolkits.mplot3d import axes3d

ax = plt.figure().add_subplot(projection="3d")
X, Y, Z = axes3d.get_test_data(0.05)

ax.plot_surface(X, Y, Z, edgecolor="royalblue", lw=0.5, rstride=8, cstride=8, alpha=0.3)

ax.contour(X, Y, Z, zdir="z", offset=-100, cmap="coolwarm")
ax.contour(X, Y, Z, zdir="x", offset=-40, cmap="coolwarm")
ax.contour(X, Y, Z, zdir="y", offset=40, cmap="coolwarm")

ax.set(
    xlim=(-40, 40), ylim=(-40, 40), zlim=(-100, 100), xlabel="X", ylabel="Y", zlabel="Z"
)

plt.show()

3. 总结

我们平时绘制2D图形比较多,2D图形只有2个维度,所以一般用缩放(Scale)变换就足够了。
但是在 3D 图形的场景中,投影就会用的多一些。

此外,和地理信息结合展示数据的时候,投影也会用的比较多。
因为数据对应到经纬度上至少是2个维度的同时变换(如果地理信息中包含海拔高度信息,则是3个维度的变换)

以上就是详解matplotlib技巧缩放和投影的详细内容,更多关于matplotlib缩放和投影的资料请关注脚本之家其它相关文章!

相关文章

  • python为tornado添加recaptcha验证码功能

    python为tornado添加recaptcha验证码功能

    tornado作为微框架,并没有自带验证码组件,recaptcha是著名的验证码解决方案,简单易用,被很多公司运用来防止恶意注册和评论。tornado添加recaptchaHA非常容易
    2014-02-02
  • 2023巨详细的Python安装库教程(以pycharm和Anaconda安装pygame为例)

    2023巨详细的Python安装库教程(以pycharm和Anaconda安装pygame为例)

    这篇文章主要给大家介绍了巨详细的Python安装库教程,文中以pycharm和Anaconda安装pygame为例,通过图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Python跳出循环语句continue与break的区别

    Python跳出循环语句continue与break的区别

    这篇文章主要介绍了Python跳出循环语句continue与break的区别,本文用实例来说明它们之间的区别,简单易记易懂,需要的朋友可以参考下
    2014-08-08
  • python字符串替换的2种方法

    python字符串替换的2种方法

    python 字符串替换 是python 操作字符串的时候经常会碰到的问题,这里简单介绍下字符串替换方法
    2014-11-11
  • 使用Python开发一个待办事项管理器

    使用Python开发一个待办事项管理器

    这篇文章主要为大家详细介绍了如何使用Python开发一个待办事项管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-03-03
  • python实现每天自动签到领积分的示例代码

    python实现每天自动签到领积分的示例代码

    这篇文章主要介绍了python实现每天自动签到领积分的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python数据库编程之SQLite和MySQL的实践指南

    Python数据库编程之SQLite和MySQL的实践指南

    这篇文章主要为大家详细介绍了Python数据库编程中SQLite和MySQL的相关操作指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • Python 字符串与数字输出方法

    Python 字符串与数字输出方法

    今天小编小编就为大家分享一篇Python 字符串与数字输出方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Pytorch修改ResNet模型全连接层进行直接训练实例

    Pytorch修改ResNet模型全连接层进行直接训练实例

    在本篇文章里小编给大家整理的是关于Pytorch修改ResNet模型全连接层进行直接训练相关知识点,有需要的朋友们参考下。
    2019-09-09
  • PyQt6之QCalendar控件的实现

    PyQt6之QCalendar控件的实现

    QCalendar类提供基于月份的日期选择功能,支持鼠标和键盘操作,默认选中当前日期,适用于需要日期输入的场景,本文就来详细的介绍一下PyQt6之QCalendar控件的实现,感兴趣的可以了解一下
    2025-09-09

最新评论