轴盒纵横比

这个演示演示了如何通过 set_box_aspect . 长方体是以物理单位表示的轴高和轴宽之比,与数据限制无关。例如,这有助于生成一个独立于其包含的数据的方形图,或在具有固定(数据)纵横比的图像图旁边具有相同轴尺寸的常规图。

下面列出了 set_box_aspect .

一个独立于数据的正方形轴

产生一个正方形的轴,无论数据限制是什么。

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

fig1, ax = plt.subplots()

ax.set_xlim(300, 400)
ax.set_box_aspect(1)

plt.show()
axes box aspect

共享方轴

生成大小为平方的共享子图。

fig2, (ax, ax2) = plt.subplots(ncols=2, sharey=True)

ax.plot([1, 5], [0, 10])
ax2.plot([100, 500], [10, 15])

ax.set_box_aspect(1)
ax2.set_box_aspect(1)

plt.show()
axes box aspect

方形双轴

产生一个正方形的轴,用一个双轴。孪生轴接管父对象的长方体。

fig3, ax = plt.subplots()

ax2 = ax.twinx()

ax.plot([0, 10])
ax2.plot([12, 10])

ax.set_box_aspect(1)

plt.show()
axes box aspect

图像旁边的正常绘图

创建具有固定数据方面和默认值的图像打印时 adjustable="box" 在正常绘图旁边,轴的高度不相等。 set_box_aspect 提供了一个简单的解决方案,通过允许正常绘图的轴使用图像尺寸作为框方面。

这个例子还表明 constrained_layout 很好地与一个固定框方面的相互作用。

fig4, (ax, ax2) = plt.subplots(ncols=2, constrained_layout=True)

np.random.seed(19680801)  # Fixing random state for reproducibility
im = np.random.rand(16, 27)
ax.imshow(im)

ax2.plot([23, 45])
ax2.set_box_aspect(im.shape[0]/im.shape[1])

plt.show()
axes box aspect

方缝/边缘地块

可能需要在联合数据图旁边显示边际分布。下面创建一个正方形打印,边缘轴的长方体方面等于gridspec的宽高比。这确保了所有轴完全对齐,与图形的大小无关。

fig5, axs = plt.subplots(2, 2, sharex="col", sharey="row",
                         gridspec_kw=dict(height_ratios=[1, 3],
                                          width_ratios=[3, 1]))
axs[0, 1].set_visible(False)
axs[0, 0].set_box_aspect(1/3)
axs[1, 0].set_box_aspect(1)
axs[1, 1].set_box_aspect(3/1)

np.random.seed(19680801)  # Fixing random state for reproducibility
x, y = np.random.randn(2, 400) * [[.5], [180]]
axs[1, 0].scatter(x, y)
axs[0, 0].hist(x)
axs[1, 1].hist(y, orientation="horizontal")

plt.show()
axes box aspect

方缝/边缘地块

在设置框方面时,还可以设置数据方面。在这里,我们创建一个具有两倍于高度的长方体的轴,并对其内容使用“相等”的数据方面,即圆实际上保持为圆形。

fig6, ax = plt.subplots()

ax.add_patch(plt.Circle((5, 3), 1))
ax.set_aspect("equal", adjustable="datalim")
ax.set_box_aspect(0.5)
ax.autoscale()

plt.show()
axes box aspect

多个子地块的方框图

可以在初始化时将长方体方面传递给轴。下面将创建一个具有所有方形轴的2×3子地块栅格。

fig7, axs = plt.subplots(2, 3, subplot_kw=dict(box_aspect=1),
                         sharex=True, sharey=True, constrained_layout=True)

for i, ax in enumerate(axs.flat):
    ax.scatter(i % 3, -((i // 3) - 0.5)*200, c=[plt.cm.hsv(i / 6)], s=300)
plt.show()
axes box aspect

工具书类

本例中显示了以下函数、方法和类的使用:

出:

<function _AxesBase.set_box_aspect at 0x7faa00da3400>

脚本的总运行时间: (0分2.472秒)

关键词:matplotlib代码示例,codex,python plot,pyplot Gallery generated by Sphinx-Gallery