在数据可视化过程中数据呈现非线性关系的情况下,有两种常用的方式去解决显示问题:

调整坐标轴比例创建图中放大局部图

调整比例

在坐标轴调整比例过程中,python在matplotlib和matlab的画图函数中分别提供了相应的调整非线性比例方法:

matplotlib中该类提供了一种调整比例方法,实际使用时提供了四种默认的非线性比例方式与一种自定义比例方式。

实际使用方法为:

import math

from matplotlib import pyplot as plt

import numpy as np

x = np.arange(10)

y = math.e**x

plt.figure()

# linear

plt.subplot(311)

plt.plot(x, y)

plt.yscale('linear')

plt.title('linear')

# ylog

plt.subplot(312)

plt.plot(x, y)

plt.yscale('log')

plt.title('ylog')

# xlog

plt.subplot(313)

plt.plot(x, y)

plt.xscale('log')

plt.title('xlog')

plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,

wspace=0.35)

plt.show()

最终结果为:

matlab内置了semilogx与semilogy方法使用效果类比上述log: x=0:10;

y=exp(1).^x;

subplot(3,1,1);

plot(x,y,'b');

subplot(3,1,2);

semilogy(x,y,'b');

subplot(3,1,3);

semilogx(x,y,'b');

最终结果为:

调整比例的方法除了上述描述可以更加灵活,如python提供了自定义的比例函数接口,或者说比例问题完全可以经过进一步数据计算后坐标轴单位即可。关于python的接口使用详细参照网址(https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.set_xscale.html#matplotlib.axes.Axes.set_xscale)

放大局部图

matplotlib

放大局部图通常用于放大局部特征,在python.matplotlib对坐标轴的描述中有如下解释:

其中描述为创建一个子坐标轴在图中,前两个参数均为子图左下角的位置(描述的值为在整个图中的比例而不是坐标),后两个参数表示子图的长宽参数,之后在子图中定义相应的坐标限制与图像绘制,最终做出局部放大的效果,代码如下:

fig, ax = plt.figure()

x=np.arange(-2,3,0.1)

y1=x**2

y2=math.e**x

plt.plot(x,y1)

plt.plot(x,y2)

plt.grid(True)

axins = ax.inset_axes([0.2, 0.5, 0.3, 0.25])

axins.plot(x,y1)

axins.plot(x,y2)

x1, x2, y1, y2 = -0.9, -0.5, 0.3, 0.7

axins.set_xlim(x1, x2)

axins.set_ylim(y1, y2)

ax.indicate_inset_zoom(axins, edgecolor="black")

plt.show()

效果如下:

上述例子参考网址(https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.inset_axes.html)

matlab

x=-2:0.1:3;

y1=x.^2;

y2=exp(1).^x;

plot(x,y1,'b')

hold on;

plot(x,y2,'Color',[1, 0.5, 0])

grid on;

axis([-2.5,3.3,-0.5,20])

axes('Position', [0.2, 0.5, 0.3, 0.25])

plot(x,y1,'b')

hold on;

plot(x,y2,'Color',[1, 0.5, 0])

xlim([-0.9, -0.5])

ylim([0.3, 0.7])

简单的可以看出来两个工具的使用方法类似,一定程度上python汲取了matlab的宝贵经验,所以不用做太多的解释,使用效果为:

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: