绘制同一图中两组点的两个插值

时间:2017-09-19 07:51:51

标签: python matplotlib plot colors interpolation

我有一套可以分辨的点数#34;分两部分,基于它们的坐标。举个例子,想象一下:

np.random.seed(1234)           #I hope this is how you use random seed, not sure

### First part of data ###
xcoord1 = np.random.uniform(10,20,100).reshape(-1,1)
ycoord1 = np.random.uniform(20,30, 100).reshape(-1,1)
part1 = np.hstack((xcoord1, ycoord1))
### second part of data ###
xcoord2 = np.random.uniform(60,90,100).reshape(-1,1)
ycoord2 = np.ranodom.uniform(5,25,100).reshape(-1,1)
part2 = np.vstack((xcoord2, ycoord2))

重要提示:正如您在此处所看到的那样,两个部分完全不相交 image

我想做什么

我有一组值

values1 = np.random.uniform(0,1, size = 200) #for part1 
values2 = np.random.uniform(0,1, size = 200) #for part2

每个都对应part1part2中的点。我可以根据颜色(here

轻松绘制它们
colors1 = [cmap(tl) for tl in values1]
colors2 = [cmap(tl) for tl in values2]
colors = ['yellow', 'red', 'green']
cmap = matplotlib.colors.ListedColormap(colors)
plt.scatter(part1[:,0], part1[:,1], c = colors1)
plt.scatter(part2[:,0], part2[:,1], c=colors2)

获得以下image1

现在我想对颜色做一些插值,但是我想让颜色仅在我有点的两个区域中进行网格划分,而不是在它们之间!所以我想做两次插值。

我设法做了以下事情:

xi = np.linspace(min(min(part1[:,0]), min(part2[:,0])), max(max(part1[:,0]), max(part2[:,0])), 200)
yi = np.linspace(min(min(part1[:,1]), min(part2[:,1])), max(max(part1[:,1]), max(part2[:,1])), 200)
xx, yy = np.meshgrid(xi, yi)
gridPoints = (xx,yy)
totalpart = np.vstack((part1, part2))
totalvalue = np.hstack((values1, values2))
zi = griddata(totalpart, totalvalue, gridPoints, method='linear')
plt.imshow(zi, origin = 'lower', cmap = cmap)

哪个给了我

image3

现在这是一个插值,但正如你所看到的那样,颜色占据了两个"簇"之间的图形部分,以前是白色的。我想拥有两个"簇中的每一个" (即part1part2)有自己的插值(如果可能,使用相同的颜色)。

我该怎么做?

我想要什么,完成涂料

我尝试用油漆做我想要达到的目标,所以你有一个更好的主意:

imagepaint

1 个答案:

答案 0 :(得分:1)

我会创建一个遮罩,将两个区域之外的zi的值设置为np.nan。那是

mask1 = (gridPoints[0] >= 10) & (gridPoints[0] <= 20) & \
    (gridPoints[1] >= 20) & (gridPoints[1] <= 30)
mask2 = (gridPoints[0] >= 60) & (gridPoints[0] <= 90) & \
    (gridPoints[1] >= 5) & (gridPoints[1] <= 25)
mask = mask1 | mask2

zi[~mask] = np.nan
plt.imshow(zi, origin = 'lower', cmap = cmap)

结果如下: enter image description here