来自numpy数组的Python等高线图

时间:2013-01-24 18:47:13

标签: python numpy matplotlib

我有一个由零和{1}组成的数组,我用它作为其他数组的掩码。我试图使用numpy来突出显示某个区域的某个区域,但每次尝试时都会出现matplotlib.contour错误。有什么想法吗?

由于这个蒙版是一组矩形,我试图手动找到边缘,但它无法正常工作。这是我使用的代码:

zero-size array to minimum.reduce without identity

那样tmp1,tmp2 = [],[] for ii in range(len(mask))[1:-2]: if mask[ii+1] - mask[ii] != 1: tmp1.append(mask[ii]) if mask[ii] - mask[ii-1] != 1: tmp2.append(mask[ii]-1) rect_limits = [] for ii in range(len(tmp1)): rect_limits.append([- delta_cont, tmp1[ii], delta_cont, tmp2[ii]]) tmp1应该给我正在搜索的矩形的最大值和最小值。 (矩形的横向边缘是固定的,所以没有问题。)

然后我只需要使用tmp2来创建我想要的矩形轮廓。

找到矩形边的任何其他想法?

编辑:

好的,所以我的面具会是这样的:

add_patch

理想情况下我想要的结果是:

[[0 0 0 0 0 0 0 0 0 0 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],      
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 0 0 0 0 0 0],
[0 0 0 0 0 0 0 0 0 0 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0]]

即用

构建的数组
[[1,3],[6,9]]

1 个答案:

答案 0 :(得分:0)

answer.py

mygrid = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0]]

def findEdges(grid)
    y_start = -1
    saved = []
    for lineno, row in enumerate(grid):
        # Case where we don't have a start point
        if y_start == -1 and 1 in row:
            y_start = lineno
        # Case where we have a start point and we just hit a zero row
        if y_start != -1 and 1 not in row:           
            saved.append((y_start, lineno-1))
            y_start = -1
        # Case where we have a start point and hit the end of the table
        if lineno == len(grid)-1 and y_start > 0:
            saved.append((y_start, lineno))

    return saved

print(findEdges(mygrid))

这给出了输出:

mike@example ~ $ python answer.py
[(1, 3), (6, 9)]

注意:如果允许两个或更多矩形在网格上并排,则不会起作用。