Matplotlib自定义统计图比例
等比例缩放坐标轴
默认情况下,Matplotlib对图形的两个轴使用不同的比例,在系列教程学会Python-Matplotlib可视化,快速完成数据分析(5)——自定义坐标轴让统计图清晰易懂中,我们已经看到可以使用plt.axis('scaled')
来使坐标轴具有相同比例,这里我们介绍另外一种方法,通过Axes对象
修改坐标轴比例。
import numpy as np from matplotlib import pyplot as plt t = np.linspace(0, 2 * np.pi, 1024) plt.axes().set_aspect('equal') plt.plot(2. * np.cos(t), np.sin(t), c = 'c', lw = 1.5) plt.show() 复制代码
等效于:
import numpy as np from matplotlib import pyplot as plt t = np.linspace(0, 2 * np.pi, 1024) plt.plot(2. * np.cos(t), np.sin(t), c = 'c', lw = 1.5) plt.axis('scaled') plt.show() 复制代码
可以看到我们绘制的椭圆,其中长轴的长度是短轴的两倍,而通过修改坐标轴的比例,Matplotlib渲染的椭圆也具有相同的比例。 Tips:plt.axes()函数返回Axes对象的一个实例,Axes实例有一个set_aspect方法,将其设置为"equal"则两个轴使用相同的比例。
如果我们不进行此设置,则所绘制的椭圆则如下图所示,看起来长轴的长度并非短轴的两倍。
import numpy as np from matplotlib import pyplot as plt t = np.linspace(0, 2 * np.pi, 1024) plt.plot(2. * np.cos(t), np.sin(t), c = 'c', lw = 1.5) plt.show() 复制代码
设置图形比例
当我们需要将图形用于期刊出版物或网站时,可能需要具有特定纵横比的图形。
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-10, 10, 1000) y_1, y_2 = np.sinc(x), np.cos(x) plt.figure(figsize=(10.24, 2.56)) plt.plot(x, y_1, c='c', lw = 1.25) plt.plot(x, y_2, c='m', lw = 1.25) plt.show() 复制代码
Tips:plt.figure()函数用于创建一个新的Figure实例,一个Figure对象表示一个图形整体。通常,此对象是在隐式创建的。但是,通过显式地创建Figure对象,我们可以控制图形的各个方面,其中figsize参数允许我们指定Figure对象大小。
设置坐标轴范围
默认情况下,Matplotlib会在两个坐标轴方向上查找数据的最小值和最大值,并进行适当的扩展,用作绘制数据的范围。但是,有时需要手动设置图形的坐标轴范围,以便更好地查看数据的极值。
import numpy as np from matplotlib import pyplot as plt x = np.linspace(-6, 6, 1024) plt.ylim(-.5, 1.5) plt.plot(x, np.sinc(x), c = 'c') plt.show() 复制代码
Tips:plt.xlim()和plt.ylim()分别用于控制x轴和y轴的范围,其接受参数用于设置坐标轴范围的最大值和最小值。
插入子图
在一个图形中嵌入的小图形有助于显示图形的细节,或者也可以说,有助于强调图形的特定部分。与使用多个子图进行的合成有所不同,这种插入子图,其子图是图形的一部分,而多个子图进行的合成中,子图间是彼此独立的,抽象的讲解太过复杂,看一个示例就能一目了然了。
import numpy as np from matplotlib import pyplot as plt x = np.linspace(-6, 6, 1024) y = np.sinc(x) x_detail = np.linspace(-2, 2, 1024) y_detail = np.sinc(x_detail) plt.plot(x, y, c = 'c') sub_axes = plt.axes([.6, .6, .25, .25]) sub_axes.plot(x_detail, y_detail, c = 'm') plt.setp(sub_axes) plt.show() 复制代码
为了插入子图,我们首先在图上创建一个子区域:
sub_axes = plt.axes([.6, .6, .25, .25]) 复制代码
在图形坐标的表示中:(0, 0)
是整个图形的左下角,(1, 1)
是右上角,子区域由四个值定义——区域左下角的坐标及其尺寸。 一旦定义了子区域,我们就有了一个Axes实例,然后就可以在其中绘制所需图形。最后,我们需要在Axes实例上调用plt.setp()显示子图:
plt.setp(sub_axes) 复制代码
Tips:可以创建的子图数量并没有限制。
作者:盼小辉丶
链接:https://juejin.cn/post/7023657057874083847