概述
坐标轴刻度线的计量方法有很多种,这里明确一下,坐标轴刻度线的计量方法是指使用的坐标系类型,例如极坐标系。一般情况下最长使用的是线性计量方法,如果遇到特殊情况,我们还可能使用对数计量、几率对数计量和对称式对数计量等方法。比方说可视化数据变化范围非常广的时候,如果使用常规坐标系,那么很有可能导致数据密集显示,甚至无法看到数据的变化趋势,这时,使用对数计量方法就可以对图形进行更好的展示。直白一点设置计量方法就是通过一种变换将 X 轴或者 Y 轴的刻度数值进行转换,即 y n e w = f ( y o l d ) y_{new} = f(y_{old}) ynew=f(yold) 。
示例
首先我们看一下为什么要有不同的计量方法,示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 10, 1024)
plt.yscale('log')
plt.plot(x, x, c = 'c', lw = 2., label = r'$f(x)=x$')
plt.plot(x, 10 ** x, c = 'y', ls = '--', lw = 2., label = r'$f(x)=e^x$')
plt.plot(x, np.log(x), c = 'm', lw = 2., label = r'$f(x)=\log(x)$')
plt.yscale('linear')
plt.legend()
plt.show()
画图结果:
因为线性计量方法表示的是变化的绝对值,所以使用该计量方法会显得很乱,无法突出我们的重点。而对数坐标表示的是变化的相对强度,所以我们进行一些修改:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 10, 1024)
plt.yscale('log')
plt.plot(x, x, c = 'c', lw = 2., label = r'$f(x)=x$')
plt.plot(x, 10 ** x, c = 'y', ls = '--', lw = 2., label = r'$f(x)=e^x$')
plt.plot(x, np.log(x), c = 'm', lw = 2., label = r'$f(x)=\log(x)$')
plt.yscale('log')
plt.legend()
plt.show()
画图结果如下,这样我们就能看出三个曲线的变化趋势了。
接下里,本文将使用多种计量方法绘制图形并将他们放置在不同的子区中,对照讲解他们的联系和区别,帮助大家更好的理解每种计量方法使用的场合和原理。完整代码如下:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y1 = [2 ** j for j in x]
y2 = [0.09 * j for j in x]
fig, ax = plt.subplots(2, 2)
# 线性
ax[0, 0].plot(x, y1)
ax[0, 0].set_yscale('linear')
ax[0, 0].set_title("linear")
ax[0, 0].grid(True, ls='-', lw=1, color='gray')
# log
ax[0, 1].plot(x, y1)
ax[0, 1].set_yscale('log')
ax[0, 1].set_title("log")
ax[0, 1].grid(True, ls='-', lw=1, color='gray')
# logit
ax[1, 0].plot(x, y2)
ax[1, 0].set_yscale('logit')
ax[1, 0].set_title("logit")
ax[1, 0].grid(True, ls='-', lw=1, color='gray')
ax[1, 0].set_ylim(0.1, 0.9)
# symlog
ax[1, 1].plot(x, y2)
ax[1, 1].set_yscale('symlog')
ax[1, 1].set_title("symlog")
ax[1, 1].grid(True, ls='-', lw=1, color='gray')
fig.subplots_adjust(hspace=0.3, wspace=0.3)
plt.show()
画图结果:
一般采用两种方式设置计量方法,第一种 plt.yscale()
;第二种针对 Axes 对象,使用 Axes.set_yscale()
方法进行设置,常用的计量方法有:
- linear:线性计量方法,这是 matplotlib 中的默认计量方法,反应的是变化的绝对值;
- log:对数计量方法,它会将 Y 轴上的刻度标签以 10 为底进行对数变换。变换完成后的 Y 轴刻度之间的距离不再均匀;
- logit:logit 刻度与线性刻度之间的变换公式为 y n e w = log 10 ( y 1 − y ) y_{new}=\log _{10} (\frac{y}{1-y}) ynew=log10(1−yy) ;
- symlog:symlog 刻度线之间的距离呈现出关于 y=0 对称的特征,即刻度线的数值绝对值完全相同。
每一种计量方法的特点各不相同,需要根据数据的特点和使用者想表达的内容进行选择。除了给 Y 轴设置计量方法,也可以给 X 轴设置计量方法,用到的方法还是 plt.xscale()
和 Axes.set_xscale()
。
往期回顾
- 【matplotlib】可视化解决方案——如何正确使用文本注释
- 【matplotlib】可视化解决方案——如何调整计量单位和计量方法
- 【matplotlib】可视化解决方案——如何实现图形的动画效果
- 【matplotlib】可视化解决方案——如何正确使用plot方法
- 【matplotlib】可视化解决方案——如何正确使用bar方法
- 【matplotlib】可视化解决方案——如何向画布中添加坐标轴
- 【matplotlib】可视化解决方案——如何正确使用matplotlib颜色系统
- 【matplotlib】可视化解决方案——如何实现画布局部放大功能
- 【matplotlib】可视化解决方案——如何更改matplotlib配置信息
- 【matplotlib】可视化解决方案——如何定制化网格
文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!如果觉得我的文章写得还行,不妨支持一下。你的每一个转发、关注、点赞、评论都是对我最大的支持!