我有一套可以分辨的点数#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))
我想做什么
我有一组值
values1 = np.random.uniform(0,1, size = 200) #for part1
values2 = np.random.uniform(0,1, size = 200) #for part2
每个都对应part1
和part2
中的点。我可以根据颜色(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)
现在我想对颜色做一些插值,但是我想让颜色仅在我有点的两个区域中进行网格划分,而不是在它们之间!所以我想做两次插值。
我设法做了以下事情:
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)
哪个给了我
现在这是一个插值,但正如你所看到的那样,颜色占据了两个"簇"之间的图形部分,以前是白色的。我想拥有两个"簇中的每一个" (即part1
和part2
)有自己的插值(如果可能,使用相同的颜色)。
我该怎么做?
我想要什么,完成涂料
我尝试用油漆做我想要达到的目标,所以你有一个更好的主意:
答案 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)