4

有没有办法将自定义模式放置到 imshow 图表上的选定区域中?准确地说,我需要做到这一点,除了带有数字数据的彩色方块外,我在其他方块中也有不同的图案,表示实验的不同故障模式(并且还生成一个解释这些含义的密钥不同的图案)。一个有用的模式示例是各种类型的交叉影线。我需要能够在不破坏图表上主要颜色-数字数据关系的情况下做到这一点。

以下是我尝试使用答案中建议的代码。如果我评论错误部分,则 imshow 会在没有来自掩码的数据的情况下显示空白。我什至没有尝试对不同的故障类型进行不同类型的交叉影线处理,或者处理模拟或实验有效但另一个还没有的情况。

EDIT3:我从多处理包中收到关于它如何“不能腌制”对象的错误消息。由于该程序,这是它的一部分通过多处理包。有什么方法可以解决这个问题或者没有 add_patches (下面建议的绘图方法不起作用,因为绘图发生在完全不同的坐标系上并绘制连接线)?

import numpy as np
import matplotlib.patches as patches
...
grid = np.ma.array(grid, mask=np.isnan(grid))
plot.imshow(grid, interpolation='nearest', aspect='equal', vmax = private.vmax, vmin = private.vmin)
if show_fail and faildat != []:
    faildat = faildat[np.lexsort((faildat[:,yind],faildat[:,xind]))]
    fails = []
    for i in range(len(faildat)):
        fails.append((faildat[i,1],faildat[i,0]))
    for F in fails:
        p = patches.Rectangle(F,1,1,hatch='/',fill=False)
        plot.add_patch(p)
plot.minorticks_off()
plot.set_xticks(range(len(placex)))        
plot.set_yticks(range(len(placey)))
plot.set_xticklabels(placex)        
plot.set_yticklabels(placey, rotation = 0)
plot.colorbar()
plot.show()
4

1 回答 1

12

有几种方法可以做到这一点,哪种更好取决于您是否需要标记大区域或分散的单个像素。

如果您需要标记大区域,您可以通过在图像上添加矩形来做到这一点:

import matplotlib as mpl
import matplotlib.pyplot as plt
from numpy.random import rand

ax = plt.gca()
ax.imshow(rand(50,50))
ax.add_patch(mpl.patches.Rectangle((2,2),20,20,hatch='//////////',fill=False,snap=False))
plt.draw()

Rectangle (doc)各种哈希选项。这只是在图像之上添加额外的艺术家,它们不会以任何方式影响数据颜色映射。大量/增加了散列标记的密度,这可能是实际看到带有小框的散列所必需的。

前任:

from numpy.random import rand
import matplotlib as mpl
import matplotlib.pyplot as plt
     
ax = plt.gca()
ax.imshow(rand(50,50),interpolation='nearest')
for i,j in np.floor(50*rand(10,2)).astype('int'):
    ax.add_patch(mpl.patches.Rectangle((i-.5, j-.5), 1, 1, hatch='///////', fill=False, snap=False))

plt.draw()

带有一些像素阴影的图像 如果您只需要在此处标记几个像素,并且您可能只需要绘图就可以逃脱(使用plot([x],[y],marker='x')并可能使用标记大小)。

于 2012-12-27T04:48:33.280 回答