ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-07 16:37:30  阅读:190  来源: 互联网

标签:10 plt 缩放 变换 matplotlib 可视化 ax 图形


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

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个维度的变换)

标签:10,plt,缩放,变换,matplotlib,可视化,ax,图形
来源: https://www.cnblogs.com/wang_yb/p/16352314.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有