Multiple hatched areas with different hatch color using pcolor in matplotlib

Tags: ,



I’m trying to change the hatch color of a hatched area but nothing seems to be working.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

x_range = np.linspace(0, 1, 30)
y_range = np.linspace(0, 1, 30)

Z = np.zeros([30, 30])

Z[:10, :] += -1
Z[-10:, :] += 1

fig, ax = plt.subplots(constrained_layout = True)

cond1 = (Z != -1)
mZ1 = np.ma.array(Z, mask=cond1)
gains_map = ListedColormap(['gainsboro'])
col1 = ax.pcolor(x_range, y_range, mZ1, cmap = gains_map)
hatch1 = ax.pcolor(x_range, y_range, mZ1,
                hatch = '\ \',  zorder = 2, alpha = 0)

cond2 = (Z != 1)
mZ2 = np.ma.array(Z, mask=cond2)
coral_map = ListedColormap(['lightcoral'])
col2 = ax.pcolor(x_range, y_range, mZ2, cmap = coral_map)
hatch2 = ax.pcolor(x_range, y_range, mZ2,
                hatch = '\ \', edgecolor = 'chocolate', zorder = 2, alpha = 0)

In this example I’d like the hatches of the red area to be a color other than black (but not affect the color of the hatches in the gray area). The areas are rectangular here, so other solutions would be possible, but I’d like something that works for more complex areas created by the mask as well. Any help would be appreciated.

Answer

Things to try:

  • use a ListedColormap with 'none' as color to make the facecolor invisible
  • use a linewidth of zero to suppress the lines between the cells
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

x_range = np.linspace(0, 1, 31)
y_range = np.linspace(0, 1, 31)

Z = np.zeros([30, 30])

Z[:10, :] += -1
Z[-10:, :] += 1

fig, ax = plt.subplots(constrained_layout=True)

cond1 = (Z != -1)
mZ1 = np.ma.array(Z, mask=cond1)
gains_map = ListedColormap(['gainsboro'])
none_map = ListedColormap(['none'])
col1 = ax.pcolor(x_range, y_range, mZ1, cmap=gains_map)
hatch1 = ax.pcolor(x_range, y_range, mZ1, cmap=none_map,
                   hatch='\ \', edgecolor='red', lw=0, zorder=2)

cond2 = (Z != 1)
mZ2 = np.ma.array(Z, mask=cond2)
coral_map = ListedColormap(['lightcoral'])
col2 = ax.pcolor(x_range, y_range, mZ2, cmap=coral_map)
hatch2 = ax.pcolor(x_range, y_range, mZ2, cmap=none_map,
                   hatch='\ \', edgecolor='green', lw=0, zorder=2)
plt.show()


Source: stackoverflow