python - Matplotlib:从二进制数据填充

标签 python matplotlib

我有一个包含填充数据的二进制 numpy 数组,以及两个定义数据边界框的网格:

data = np.random.choice([0, 1], size=12).reshape((3, 4))
xGrid = np.linspace(1, 4, 4)
yGrid = np.linspace(0.1, 0.3, 3)

我想在数据为 1 的任何网格点上绘制具有特定 Alpha 的特定颜色,当数据为 0< 时/。两个最接近的 matplotlib 函数是

  • fill,需要 (x, y) 坐标,无法使用此数据
  • imshowmatshow,不幸的是,它会在各处绘制一些颜色。也就是说,它还会在 data == 0 的任何地方绘制从颜色映射中提取的一些颜色。现在,我可以尝试让该颜色成为斧头的背景颜色,但这相当令人讨厌。

边界框的预期行为如下:xGrid 包含三个值,并且 x 维度上有三个数据点。 xGrid 中的每个值表示每个数据点的中心点位置,与 yGrid 类似。 “填充数据点”相当于填充由中心坐标 (x, y) 定义的矩形。

实现这一目标的最佳方法是什么?

最佳答案

了解填充区域是使用网格交叉点作为中心点绘制的,我们有

In [27]: import numpy as np 
    ...: import matplotlib.pyplot as plt 
    ...: np.random.seed(2018) 
    ...: data = np.random.choice([0, 1], size=12).reshape((3, 4)) 
    ...: xGrid = np.linspace(1, 4, 4) 
    ...: yGrid = np.linspace(0.1, 0.3, 3)                                                 

In [28]: print(data)                                                                      
[[0 0 0 1]
 [1 0 0 0]
 [1 1 1 1]]

In [29]: dx, dy = (xGrid[1]-xGrid[0])/2, (yGrid[1]-yGrid[0])/2                                    

In [30]: xli, yli = [], [] 
    ...: for y in yGrid: 
    ...:     for x in xGrid: # the x's in data are changing faster, so inner loop
    ...:         xli.append([x-dx, x+dx, x+dx, x-dx, x-dx]) 
    ...:         yli.append([y-dy, y-dy, y+dy, y+dy, y-dy]) 

In [31]: for xs, ys, Bool in zip(xli, yli, data.flatten()): 
    ...:     if Bool : plt.fill(xs, ys, color='red')
    ...: plt.gca().set_facecolor('yellow')                                      

执行上面的代码给我 enter image description here

值得一提的是,绘制填充的矩形,如用不同颜色填充绘图区域的背景所示。

plt.fill已记录here以及第一个for中创建的列表循环只是可以由 plt.fill 绘制的矩形角的 xy 坐标。 .


关于效率的说明

如果必须绘制数百个矩形,上面的简单方法就可以了,如果我们要绘制数以万计的也许,我们希望使用 enumerate 循环数据点。 ,如果需要构建 xy 列表并动态绘制矩形,或者为了提高性能,创建 Rectangle补丁,将其放入 PatchCollection并使用 ax.add_collection当我们完成 data 上的循环时的方法— an example is available在 Matplotlib 文档中,可以轻松适应范围和 another example这是我的新答案。

关于python - Matplotlib:从二进制数据填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53846424/

相关文章:

python - 没有扭曲的扭曲应用程序

python - python中两个列表的比较

python - Django 和动态生成的图像

python - Keras:batch_size 的类型错误

python - matplotlib 2.0.0 的默认样式名称是什么?

python - 绘制二维数组的曲面图

python - 创建绘图的 Pytest 测试函数

python-2.7 - 升级后的python matplotlib更改了 latex 字体

python - 根据 NetworkX 中出现的次数计算边的权重

python - Python 中的属性错误 : 'list' object has no attribute 'split'