matplotlib可视化系列之【缩放和投影】

yizhihongxing

有时候,我们将数据变换之后再绘图,一方面,可以突出某些区域的数据;另一方面,变换之后可以更好的看出数据之间的关系。

matplotlib 提供了两种变换数据的方式,一种是 Scale(缩放),一种是Projection(投影)。

Scale是对数据的一个维度进行变换,Projection则是对2个或者2个以上的维度进行变换。

Scale - 缩放

线性缩放

线性缩放是默认的缩放方式,数据的值是通过线性变换之后显示在图形的。
每个数值变换成图形上的像素位置之后绘制在图形上。

比如:

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

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

plt.show()

显示图形如下:
3c3542b0-c1d3-45e3-9ec0-4127da2bdabf.png

上面的例子中,x 和 y 的关系是 y = x,如果 x 和 y 的关系是 y = 10^x,仍然用线性缩放显示的话,图形会被压缩成一个非常窄的长条形。

比如下面的代码:

import math

x = list(range(1, 11))
y = [ math.pow(10, 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()

可以试试看,因为 x 的值很小的时候,y 的值就会很大,显示出来的图几乎无法查看。

对数缩放

matplotlib 中默认还提供了

  • log:以10为底数的对数缩放,不支持负数和0
  • logit:以2为底数的对数缩放,不支持负数和0
  • symlog:包含线性缩放和对数缩放,0附近的值用线性缩放,其他值用对数缩放

上面的例子中,x 和 y 的关系是 y = 10^x,所以,我们可以在Y轴上用对数缩放。
同时调节 ylim 的范围,使得图形显示的更加均匀。

import math

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

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

plt.show()

显示效果如下:
6cef5702-f9a8-4251-86eb-90b40328d651.png

自定义缩放

自定义缩放函数时,定义2个可互相转换的函数。
比如,对于 y = x^2 关系,也就是,y 是 x 的平方。默认显示的效果如下:

x = list(range(1, 11))
y = [ a * a for a in x]

fig = plt.figure(figsize=(6,6))
ax = plt.subplot(1,1,1, aspect=1, xlim=[1,10], ylim=[1, 10*10])

ax.plot(x, y, marker="o")

plt.show()

02bd3c69-551f-4b9d-b25d-24888f2e4904.png

添加自定义缩放后:

def forward(x):
    return x**2

def inverse(x):
    return x**(1/2)

x = list(range(1, 11))
y = [ a * a for a in x]

fig = plt.figure(figsize=(6,6))
ax = plt.subplot(1,1,1, aspect=1, xlim=[1,10], ylim=[1, 10*10])

ax.set_xscale('function', functions=(forward, inverse))
ax.plot(x, y, marker="o")

plt.show()

5cadc9dd-2936-4ed3-a3d4-8ea83affb146.png

图形的显示美观很多。

Projection - 投影

投影是多个维度的变换,一般用在坐标系的转换上。

笛卡尔坐标系和极坐标系

比如,下面例子中分别将数据显示在笛卡尔坐标系和极坐标中,体会下其中的区别。

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()

10edc7cb-515d-465d-a354-28d167d075b4.png

极坐标系一般用在非线性的关系中,上面的数据用 笛卡尔坐标更合适。

投影的场景

投影使用的场景其实不只是坐标系的变换。

因为我们平时绘制2D图形比较多,2D图形只有2个维度,所以一般用缩放(Scale)变换就足够了。
但是在 3D 图形的场景中,投影就会用的多一些,matplotlib 绘制3D图形需要额外的库,这里不演示了。

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:matplotlib可视化系列之【缩放和投影】 - Python技术站

(0)
上一篇 2023年4月2日 下午5:32
下一篇 2023年4月2日 下午5:32

相关文章

  • 数据采集实战(六)– 新浪新闻

    1. 概述 新闻是我们了解外界的重要渠道,以前,我们一般通过报纸和电视来获取新闻,那时候,获取新闻不仅有一定的成本,效率还不高。 而如今,获取新闻的途径太多太方便了,大量重复的新闻充斥着各大平台,获取新闻已经没有什么成本,问题变成了过滤和鉴别新闻的可信程度。 下面用 【新浪新闻】 作为采集对象,抛砖引玉,演示下新闻从采集到分析的整个过程。 2. 采集流程 主…

    2023年4月2日
    00
  • 【manim动画教程】–高级动画效果

    在常用的动画效果中,介绍了一些元素的创建,销毁,移动和变换的方法,这些方法都是针对单个动画的。如果需要多个动画互相关联,或者元素需要有更复杂的运动方式,那么,仅仅依靠常用的动画效果可能就无法满足要求了。 本篇的高级动画效果主要介绍一些更加灵活的元素运动方式,如何组合多个动画,以及如何联动多个动画的方式。掌握了这些方法,就能够表达出更加复杂的数学几何动画。 1…

    python 2023年4月17日
    00
  • 云环境自动化(Terraform+Ansible)

    应用的自动化部署由来已久,也有很多知名的工具,比如puppet,ansible,saltstack,chef等等。但是对于基础设施部分,一般都是以事先准备的方式来提供的。 虽然各大云服务器厂商也逐步提供了各类的API,用来控制自己的基础设施,但是,由于各类厂商的差异性,API差异很大且没有统一分类标准,兼容各个云环境的难度非常大。 不过,随着Terrafor…

    云计算 2023年4月18日
    00
  • 【manim】之目录动画

    概要 最近,结合视频剪辑工具剪映制作短视频时,如果不是数学相关的内容,使用视频剪辑工具配置字幕,添加图片等等比 manim更加方便。 所以,用 manim封装一个目录的动画,用来配合剪辑工具中的其他资源。 代码封装 基于manim封装一个目录显示的 class。主要属性就是 titles,也就是目录中的各个标题。 class CatalogDisplayer…

    Python开发 2023年3月31日
    00
  • matplotlib可视化系列之【颜色】

    颜色和排版一样,看似简单,其实非常复杂,往大了说,涉及到艺术和品味,不像数学公式,物理定理那样,是非分明。 但是,对 matplotlib 中的颜色有些基本的了解,可以让绘出的图形颜色不至于太突兀。虽不能说选出完美的颜色搭配,至少是看着舒服,醒目的颜色搭配。 颜色的种类 颜色一般用 RGB 来表示,颜色空间主要有3种: RGB sRGB Lab 3种颜色空间…

    2023年4月2日
    00
  • 【pandas基础】–概述

    Pandas是一个开源的Python数据分析库。它提供了快速,灵活和富有表现力的数据结构,旨在使数据清洗和分析变得简单而快速。 Pandas是基于NumPy数组构建的,因此它在许多NumPy函数上提供了直接的支持。它还提供了用于对表格数据进行操作的数据结构,例如Series和DataFrame。 Pandas提供了许多用于数据操作和处理的函数和方法,例如数据…

    python 2023年5月2日
    00
  • 【pandas基础】–核心数据结构

    pandas中用来承载数据的两个最重要的结构分别是: Series:相当于增强版的一维数组 DataFrame:相当于增强版的二维数组 pandas最大的优势在于处理表格类数据,如果数据维度超过二维,一般我们会使用另一个 python的库 numpy。 本篇主要介绍这两种核心数据结构的创建方式。 1. Series pandas的Series是一种带有标签索…

    python 2023年5月8日
    00
  • 【manim动画教程】– 文本样式

    文本的样式主要指颜色和字体相关的属性设置。 对于manim的两个文本对象 Text和 Tex来说,Text对象有更多的属性可以调整样式,相对来说,由于 Tex主要用来显示数学公式,所以关于样式的属性要少一些。 下面介绍一些我在视频制作时最常用的一些颜色和字体相关的属性。 1. 颜色相关 颜色设置主要分为单色,渐变色两种,对于 Text对象,manim还提供了…

    python 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部