使用 matplotlib 中的 pcolor 绘制不同阴影颜色的多个阴影区域

3

我试图更改图案区域的填充颜色,但似乎没有任何作用。

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)


在这个例子中,我希望红色区域的阴影颜色不是黑色(但不影响灰色区域的阴影颜色)。这些区域在这里是矩形,因此可能存在其他解决方案,但我希望能够适用于由遮罩创建的更复杂的区域。任何帮助将不胜感激。

为什么透明度设置为0?尝试将其更改为alpha=0.4 - r-beginners
原因是,如果将alpha设置为非零值,则掩蔽区域将被默认的cmap填充,似乎没有办法关闭它。将alpha设置为零不会影响边缘(据说这些边缘属于hatches)。 - snoopyhunter
1个回答

3

尝试以下内容:

  • 使用 ListedColormap 并将颜色设置为 'none' 以使面颜色不可见
  • 使用线宽为零以取消单元格之间的线条
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()

multiple areas with different hatch color


谢谢JohanC,使用带有“none”的ListedColormap的建议非常完美!但我仍然不清楚为什么必须使用这样一个不直观的实现方式。同样适用于必须使用单一颜色创建ListedColormap以显示Z数组中所有值相同的颜色,而不是简单地传递颜色参数而不是cmap。 - snoopyhunter
1
可能 pcolor 最初并不是为了只使用一种颜色或使用阴影而设计的(最初可能没有掩码数组)。PS:请注意,对于30x30个单元格,您需要31个x值和31个y值。x和y值确定单元格的边界。 - JohanC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接