我想根据另一个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仍然没有转移。
我期待这样的事情:
答案 0 :(得分:1)
您的代码中有拼写错误,第17行的正确语法是
x_shift
然而,尽管它确实改变了qm2的位置,但它并没有在数据坐标中这样做,我真的不知道为什么。您可以使用y_shift
和pcolormesh
的值,直到达到所需的位置,但这不是很优雅。
我可以提供的一个解决方案是明确指定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": [
{
答案 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)])