如何在matplotlib中填充一个分散的区域?

时间:2012-01-09 19:30:22

标签: python matplotlib

我的数据文件包含x,y平面上的随机散乱数据。我想要的只是用纯色填充分散的区域。我的数据没有排序。我曾尝试在matplotlib中使用散点图,但我的数据文件中的点数非常大,因此在散点图中绘制它们会使得结果图的大小非常大。分散的数据在x,y平面上形成小岛。

2 个答案:

答案 0 :(得分:3)

您可以使用numpy的histogram2d方法计算x,y值的直方图(2D)。然后绘制对于所有非零区域都为true的数组,对于所有零区域绘制false。您可以使用bins参数控制直方图的分辨率。此方法返回3个数组的元组:2D直方图和两个1D数组,对应沿每个“边”(x然后y)的bin步。您可以使用range参数控制步长值。

例如:

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(101)
x = np.random.normal(0,1,10000)
y = np.random.normal(0,1,10000)

hist,xedge,yedge= np.histogram2d(x,y,bins=100,range=[[-4,4],[-4,4]])

plt.imshow(hist==0,
           origin='lower',
           cmap=plt.gray(),
           extent=[xedge[0],xedge[-1],yedge[0],yedge[-1]])

plt.savefig('hist2d.png')
plt.show()

这导致:

enter image description here

黑点表示您有任何数据,白点是没有数据的地方。直方图使用imshow方法显示,该方法用于绘制图像或矩阵。默认情况下,它设置为左上角的原点,因此您要么更改参数origin='lower',要么适当调整extent参数,该参数控制范围值:[intial x, final x,initial y,final y]。您可以通过调整color map来控制颜色方案。

正如@joaquin在评论中提到的那样,您也可以简单地绘制imshow(hist)以查看全部值(热图),而不是0或1。

答案 1 :(得分:1)

import numpy as np
import matplotlib.pylab as plt
x=np.random.rand(10)
y=np.random.rand(10)
plt.figure()
plt.fill(x,y,'b')
plt.show()

what I got

还有一个fill_between填充两行之间 matplotlib documentation of them both