Search code examples
pythonmatplotlibimshow

How to draw cell borders in imshow


I have a small 2d vector to display:

import matplotlib.pyplot as plt
import numpy as np

img = np.random.rand(4,10)
plt.imshow(img, cmap='Reds')

As folllow:

enter image description here

But now I want to mark a specific cell, in order to focus the reader on that cell. Because this is of specific interest...

Therefore something like a border of this cell would be nice:

enter image description here

Does someone know how to archive this with matplotlib in a convenient way?


Solution

  • Put a rectangle at the position of the pixel you want to highlight.

    import matplotlib.pyplot as plt
    import numpy as np
    
    def highlight_cell(x,y, ax=None, **kwargs):
        rect = plt.Rectangle((x-.5, y-.5), 1,1, fill=False, **kwargs)
        ax = ax or plt.gca()
        ax.add_patch(rect)
        return rect
    
    img = np.random.rand(4,10)
    plt.imshow(img, cmap='Reds')
    
    highlight_cell(2,1, color="limegreen", linewidth=3)
    
    plt.show()
    

    enter image description here