Matplotlib imshow的选择性模式

时间:2012-12-26 20:12:06

标签: matplotlib graphing

有没有办法将自定义图案放置在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()

1 个答案:

答案 0 :(得分:9)

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

如果您需要标记大区域,可以通过在图像上添加矩形来完成此操作:

import matplotlib as mpl
import matplotlib.pyplot as plt

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 matplotlib.pylab import * # mostly to get 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()

enter image description here 如果您只需要在这里标记几个像素,那么您可以通过绘图(使用plot([x],[y],marker='x')并使用标记大小播放)来逃避。