【发布时间】:2023-04-06 10:52:01
【问题描述】:
这是我的问题
抱歉,表达混乱。
请检查我的更新。更清楚了。
1。简介
- 3-d numpy-array "data" 形状为 (10, 31, 37)。
- 第一个维度 10 是二维数组的个数
- 最后 2 个数组表示二维区域的一些网格值,值为 0 和 1
显示如下:
### mask the value 0 of data[1,:,:]
data_mask = np.ma.masked_less(data[[1,:,:],0.001)
pc =plt.pcolor(xx,yy,data_mask[i,:,:],alpha =1,facecolor = "pink",edgecolor = 'steelblue',zorder =3)
## plotting the grid line
mesh =plt.pcolor(xx,yy,data[1,:,:],cmap="gray",alpha =0.45,facecolor = "none",edgecolor = 'k')
(来源:tietuku.com)
2。我的尝试
- 在一个图中用不同颜色绘制每个二维数组
- 如果可以用其他颜色(如维恩图)或填充类型(“影线”)绘制横截面部分,:
(来源:tietuku.com)
3。我的代码
例如两个二维数组。
(来源:tietuku.com)
cs=plt.cm.jet(np.arange(2)/2.)
for i in range(0,2,1):
data_mask = np.ma.masked_less(data[i,:,:],0.001)
plt.pcolor(xx,yy, data_mask[i,:,:],alpha =0.95,facecolor = cs[i],edgecolor = 'k',zorder =3)
结果
(来源:tietuku.com)
这些数字似乎都是颜色设置错误。
4。我的问题
- 如何设置 pcolor 网格颜色?在我的示例中,使用
facecolor =不起作用。我知道使用cmap = plt.cm.xxx有效(下图)。但我必须分别绘制这两个二维数组。
(来源:tietuku.com)
- 正如我在'我的尝试 2' 中所说,有没有一种方法可以证明重叠并以某种智能方式标记这些网格。
我能想到的是生成另一个名为 'overlap' 的 np.array 并保存每个网格的信息
for i in range(0,data.shape[1],1):
for j in range(0,dat.shape[2],1):
if (data[0,i,j] == 1) & (data[1,i,j] == 1.0):
overlap[i,j] = 1
当二维数组多于两个时,此方法无法处理。
更新-2016-01-17
我用生成它的代码将我的问题总结为一个数字:
cover_mask = np.ma.masked_less(data[0,:,:],0.001)
plt.pcolor(xx,yy,data_mask[0,:,:],cmap = plt.cm.Set1,alpha =0.75,\
edgecolor = 'k',zorder =3)
cover_mask = np.ma.masked_less(cov[1,:,:],0.001)
plt.pcolor(xx,yy,cover_mask[1,:,:],cmap = plt.cm.Set2,alpha =0.75,\
edgecolor = 'k',zorder =3)
http://i4.tietuku.com/1d47a3410417cd4f.png
我的问题
-
在上面的代码中,我分别绘制了二维数组。如果可以使用
facecolor = 'cs[i]'和cs=plt.cm.xxx(np.arange(2)/2.)设置网格颜色,我可以循环我的所有数据[0:10,:,:]。但我只能使用cmap = xxx来区分每个数组的颜色。 我不知道如何循环颜色图。 -
在上图中,红色网格和绿色网格是重叠的。为了更好的可视化效果,我想标记这些重叠的网格。
想法 1
- 每个二维网格都有不同的颜色,所有重叠区域共享相同的颜色(在我的例子中,需要 11 种颜色)
想法 2
用“X”或类似下图的东西标记重叠的网格。
(来源:tietuku.com)
添加
基于这个post,'pcolor/pcolormesh'好像没有设置hatch = '* '的功能。
【问题讨论】:
-
有 10 个 2d 数组,所以需要 2**10 种颜色来表示重叠。这是你想要的吗?
标签: python arrays numpy matplotlib matplotlib-basemap