gpt4 book ai didi

python - Matplotlib Artist 中的 clip_box 是什么意思?

转载 作者:行者123 更新时间:2023-12-05 04:22:38 25 4
gpt4 key购买 nike

我正在使用下面的代码片段测试 Artist 的 clip_box 功能:

import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox
import numpy as np

fig = plt.figure()
ax = fig.subplots(1, 2)

x = [1, 2, 3, 4]
y = [3, 8, 5, 2]

line_a, = ax[0].plot(x, y, color='red', linewidth=3.0)
line_b, = ax[1].plot(x, y, color='red', linewidth=3.0)

boundingbox = Bbox(np.array([[0, 0], [3, 9]]))
line_b.set_clip_box(boundingbox)
line_b.set_clip_on(True)

plt.show()

我期望的是line_b的最后一部分会被剪辑框剪掉,line_b会比line_a短一点>.

事实证明,第二个子图上什么也没有留下。它完全是空的。是我对 clip_box 的理解有误还是代码片段有问题?

最佳答案

右侧图的“自然”剪辑框是 ax[1].bbox。找到它的范围可以告诉我们应该使用什么单位来指定剪辑框 Bbox

由于我们在创建时没有将Bbox实例添加到任何轴上,所以它只能相对于图形。当我们打印 ax[1].bbox 时,我们可以看到它的大小是以像素为单位指定的。

使用 Rectangle 或 Polygon 确实简单多了指定剪辑框,因为它们可以添加到轴。为它的 facecolor 使用 'none' 颜色会更方便,因为它与图形样式无关。

import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox

fig = plt.figure(dpi=89)
ax = fig.subplots(1, 2)

x = [1, 2, 3, 4]
y = [3, 8, 5, 2]

line_a, = ax[0].plot(x, y, color='red', linewidth=3.0)
line_b, = ax[1].plot(x, y, color='red', linewidth=3.0)

print(ax[1].bbox, '\n', ax[1].bbox.extents)
# the line above prints
# TransformedBbox(
# Bbox(x0=0.5477272727272726, y0=0.10999999999999999, x1=0.8999999999999999, y1=0.88),
# BboxTransformTo(
# TransformedBbox(
# Bbox(x0=0.0, y0=0.0, x1=6.393258426966292, y1=4.797752808988764),
# Affine2D().scale(178.0))))
# [ 623.31363636 93.94 1024.2 751.52 ]
# 178.0 is 2 * dpi, I believe the doubling happens because of what screen I have got

boundingbox = Bbox.from_extents([623.31363636, 93.94, 900.2, 751.52])
print(boundingbox, '\n', boundingbox.extents)
# the line above prints
# Bbox(x0=623.31363636, y0=93.94, x1=900.2, y1=751.52)
# [623.31363636 93.94 900.2 751.52 ]
line_b.set_clip_box(boundingbox)
line_b.set_clip_on(True)

plt.show()

关于python - Matplotlib Artist 中的 clip_box 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73934908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com