阅读 187

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


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐