Python 使用matplotlib中的pcolor,可以使用不同图案填充颜色的多个图案填充区域

Python 使用matplotlib中的pcolor,可以使用不同图案填充颜色的多个图案填充区域,python,matplotlib,Python,Matplotlib,我试图更改阴影区域的阴影颜色,但似乎没有任何效果 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, a

我试图更改阴影区域的阴影颜色,但似乎没有任何效果

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)

在本例中,我希望红色区域的图案填充为黑色以外的颜色(但不影响灰色区域中图案填充的颜色)。这里的区域是矩形的,所以其他的解决方案也是可能的,但是我想让它也适用于由遮罩创建的更复杂的区域。任何帮助都将不胜感激。

需要尝试的事项:

  • 使用带有
    'none'
    作为颜色的ListedColormap使facecolor不可见
  • 使用零线宽抑制单元格之间的线条
将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.colors导入ListedColormap
x_range=np.linspace(0,1,31)
y_范围=np.linspace(0,1,31)
Z=np.零([30,30])
Z[:10,:]+=-1
Z[-10:,:]+=1
图,ax=plt.子批次(受约束的_布局=真)
cond1=(Z!=-1)
mZ1=np.ma.阵列(Z,掩码=cond1)
增益\u map=ListedColormap(['gainsboro']))
none\u map=ListedColormap(['none']))
col1=ax.pcolor(x_范围,y_范围,mZ1,cmap=gains_映射)
hatch1=ax.pcolor(x_范围,y_范围,mZ1,cmap=none_映射,
图案填充=“\\\”,边颜色=”红色',lw=0,zorder=2)
cond2=(Z!=1)
mZ2=np.ma.阵列(Z,掩码=cond2)
coral_map=ListedColormap(['lightcoral']))
col2=ax.pcolor(x_范围,y_范围,mZ2,cmap=coral_映射)
hatch2=ax.pcolor(x_范围,y_范围,mZ2,cmap=none_映射,
图案填充=“\\\”,边色=”绿色',lw=0,zorder=2)
plt.show()
要尝试的内容:

  • 使用带有
    'none'
    作为颜色的ListedColormap使facecolor不可见
  • 使用零线宽抑制单元格之间的线条
将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.colors导入ListedColormap
x_range=np.linspace(0,1,31)
y_范围=np.linspace(0,1,31)
Z=np.零([30,30])
Z[:10,:]+=-1
Z[-10:,:]+=1
图,ax=plt.子批次(受约束的_布局=真)
cond1=(Z!=-1)
mZ1=np.ma.阵列(Z,掩码=cond1)
增益\u map=ListedColormap(['gainsboro']))
none\u map=ListedColormap(['none']))
col1=ax.pcolor(x_范围,y_范围,mZ1,cmap=gains_映射)
hatch1=ax.pcolor(x_范围,y_范围,mZ1,cmap=none_映射,
图案填充=“\\\”,边颜色=”红色',lw=0,zorder=2)
cond2=(Z!=1)
mZ2=np.ma.阵列(Z,掩码=cond2)
coral_map=ListedColormap(['lightcoral']))
col2=ax.pcolor(x_范围,y_范围,mZ2,cmap=coral_映射)
hatch2=ax.pcolor(x_范围,y_范围,mZ2,cmap=none_映射,
图案填充=“\\\”,边色=”绿色',lw=0,zorder=2)
plt.show()

为什么透明度设置为0?尝试将其更改为
alpha=0.4
。原因是如果alpha设置为非零,则默认cmap将填充遮罩区域,似乎无法关闭此选项。将alpha设置为零不会影响边(图案填充应该属于这些边)。为什么透明度设置为0?尝试将其更改为
alpha=0.4
。原因是如果alpha设置为非零,则默认cmap将填充遮罩区域,似乎无法关闭此选项。将alpha设置为零不会影响边缘(图案填充应该属于这些边缘)。感谢JohanC,建议将ListedColormap与
'none'
一起使用,效果非常好!我完全不清楚为什么必须使用这样一个非向前的实现。这也适用于必须使用单一颜色制作ListedColormap,以便以相同颜色显示Z数组中的所有值,而不是简单地传递颜色参数而不是cmap。可能
pcolor
最初不是设计为仅使用一种颜色,也不是使用图案填充(最初可能没有屏蔽阵列).PS:请注意,30x30单元格需要31个x值和31个y值。x值和y值决定单元格的边界。感谢JohanC,建议将ListedColormap与
'none'
一起使用效果非常好!我完全不清楚为什么必须使用这种非前向实现。这也适用于make一个具有单一颜色的ListedColormap,仅用于以相同颜色显示Z数组中的所有值,而不是简单地传递颜色参数而不是cmap。可能
pcolor
最初不是设计为仅使用一种颜色,也不是使用图案填充(最初可能没有遮罩数组).PS:请注意,30x30单元格需要31个x值和31个y值。x值和y值确定单元格的边界。