在不同的位置绘制几个pcolormesh

2024-09-30 22:12:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据另一个pcolormesh(这里称为qm2)绘制一个左下像素位于给定位置的pcolormesh(这里称为qm1)。在

我试着跟着:

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':

    s_det = 4
    s_array = 14

    x_shift = 5
    y_shift = 5

    array = np.zeros([s_array, s_array])
    det = np.random.randint(0, 2, [s_det, s_det])

    qm1 = plt.pcolormesh(array, alpha=.0)
    qm2 = plt.pcolormesh(det, cmap='Oranges', edgecolor='black')
    qm2.set_offset_position('data')
    qm2.set_offsets = ([x_shift, y_shift])

    ax = plt.axes()
    ax.set_aspect('equal')
    plt.show()

但qm2仍保持不变。在

pcolormesh

我本以为会是这样的:

{a2}


Tags: importshiftmatplotlibasnp绘制plt像素
2条回答

您的代码中有一个错误,第17行的正确语法是

qm2.set_offsets([x_shift, y_shift])

然而,尽管它确实改变了qm2的位置,但它在数据坐标中并没有这样做,我真的不知道为什么。您可以使用x_shifty_shift的值,直到到达所需的位置,但这不是很优雅。在

我可以提供的一个解决方案是显式地指定pcolormesh的坐标X,Y。documentation for ^{}不是很明确,但我相信它使用了the same convention as ^{}。在

^{pr2}$

enter image description here

{cd1>显然,这样的论点被忽略了

qm2.set_offset_position('data')
qm2.set_offsets([x_shift, y_shift])

偏移仍然以像素为单位,而不是以数据坐标为单位。在

解决方法是定义自己的转换并将其添加到现有变换之前:

^{pr2}$

完整示例:

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

s_det = 4
s_array = 14

x_shift = 5
y_shift = 5

array = np.zeros([s_array, s_array])
det = np.random.randint(0, 2, [s_det, s_det])

qm1 = plt.pcolormesh(array, alpha=.0)
qm2 = plt.pcolormesh(det, cmap='Oranges', edgecolor='black')

trans = matplotlib.transforms.Affine2D().translate(x_shift, y_shift)
qm2.set_transform(trans + qm2.get_transform())

ax = plt.gca()
ax.set_aspect('equal')
plt.show()

enter image description here

相关问题 更多 >