在不同位置绘制几个pcolormesh

时间:2017-12-06 09:22:55

标签: python matplotlib

我想根据另一个pcolormesh(此处称为qm1)绘制一个pcolormesh(此处称为qm2),其左下角像素位于给定位置。

我试过以下:

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

我期待这样的事情:

enter image description here

2 个答案:

答案 0 :(得分:1)

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

x_shift

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

我可以提供的一个解决方案是明确指定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]) qm2_x = x_shift + np.arange(s_det+1) qm2_y = y_shift + np.arange(s_det+1) qm1 = plt.pcolormesh(array, alpha=.0) qm2 = plt.pcolormesh(qm2_x, qm2_y, det, cmap='Oranges', edgecolor='black') ax = plt.axes() ax.set_aspect('equal') plt.show() 的坐标X,Y。 documentation for pcolormesh不是很明确,但我认为它使用了the same convention as pcolor

    {
        "raceId" : 1  // you missed comma here
        "participants": [
         {

enter image description here

答案 1 :(得分:0)

显然忽略qm2.set_offset_position('data') qm2.set_offsets([x_shift, y_shift]) 参数,这样做时

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

移位仍然是像素,而不是数据坐标。

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

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()

完整示例:

np.stack([np.random.choice(np.arange(1,50),size=6,replace=False) for i in range(100)])

enter image description here