python - 使用一堆不同颜色的二维数组绘制 pcolormesh

标签 python arrays numpy matplotlib matplotlib-basemap

这是我的问题

抱歉表达困惑。

只需检查我的更新。更清楚了。

1。简介

  • 3-d numpy 数组“数据”,形状为 (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')       

Sorry, China don't allow me using imgur
(来源:tietuku.com)

2。我的尝试

  • 在一张图中用不同颜色绘制每个二维数组
  • 如果可以用其他颜色(如维恩图)或填充类型(“hatch”)绘制横截面部分,:


(来源: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。我的问题

  1. How to set the pcolor grid color? In my example, using facecolor = didn't work. And I know using cmap = plt.cm.xxx works(picture below). But I must plot this two 2-d array separately.


(来源:tietuku.com)

  1. As I said in 'My attempt 2', Is there a method to testify the overlapping and label these grid in some smart way.

我能想到的是生成另一个名为“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

我的问题

  1. 在上面的代码中,我分别绘制了二维数组。如果可以使用 facecolor = 'cs[i]'cs=plt.cm.xxx(np.arange(2)/2.) 设置网格颜色,我可以循环所有数据[0:10,:,:]。但我只能使用 cmap = xxx 来区分每个数组的颜色。 我不知道如何循环颜色图。

  2. 上图中,红色网格和绿色网格重叠。为了更好的可视化效果,我想将这些重叠的网格标记为“strikeed”。

想法 1

  • 每个二维网格都有不同的颜色,并且所有重叠区域共享相同的颜色(在我的例子中,需要 11 种颜色)

想法 2

用“X”或类似下图的内容标记重叠网格。


(来源:tietuku.com)

添加

基于此post ,好像'pcolor/pcolormesh'没有设置hatch = '*'的功能。

最佳答案

免责声明:我以前没有使用过 numpy 颜色图。

也就是说,我想我明白你的问题出在哪里。来自 cmap 文档:

Typically Colormap instances are used to convert data values (floats) from the interval [0, 1] to the RGBA color that the respective Colormap represents.

我认为问题在于您将所有网格值设置为 1,然后将所有重叠值也设置为 1。所以在 cmap 中它们最终是相同的颜色。如果您希望它们具有不同的颜色,则它们需要具有不同的值。或者,如果您想要介于 0 和 1 之间的某个值,请使用 0 和 1 之间的 float 。将一个数组的所有值设置为 1,另一个数组的所有值设置为 0,并将重叠单元格设置为 0.5,将为您提供 cmap 另一端的颜色重叠单元格是两者的混合(假设您使用的是 2 色 cmap)。修改:

for i in range(0,data.shape[1],1):
    for j in range(0,dat.shape[2],1):
        #assuming you've set one array to 0 and the other to 1
        overlap[0, i, j] = abs(data[0, i, j] / data[1, i, j) / 2 
        #if (data[0,i,j] == 1) & (data[1,i,j] == 1.0)
            #overlap[i,j] = 1

希望能回答您的问题,这有点令人困惑。我很感激您提供的所有信息,但在开始时明确的“这正是错误所在”声明肯定有助于理解问题。嘿,请告诉我这是否可以解决问题,因为我很感兴趣。

关于python - 使用一堆不同颜色的二维数组绘制 pcolormesh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34836343/

相关文章:

numpy - sklearn : get feature names after L1-based feature selection

python - 从Python中的列中删除单词

python - 奇异矩阵 - python

php - 使用 HTML 表单从图像数组中删除字符串

python - 数组的精确直方图

python - 如何使用 numpy 从附加的多维数组中删除 'None'

python - 如何创建一个 bool 数组,其中值基于索引数组?

python - 在 Python 中对 Cython 对象进行空间高效的 pickle ?

php - 如何在对象数组中找到 max 属性?

javascript - 从键中获取 JSON 值