我正在绘制以下数据:
fig, ax = plt.subplots()
im = ax.scatter(std_sorted[:, [1]], std_sorted[:, [2]], s=5, c=std_sorted[:, [0]])
具有以下结果:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9xTkdkUi5wbmcifQ==” alt =“当前散点图的样子”>
我的问题是:我可以通过外推并随后对该外推空间进行着色来填充图中每个点之间的空间,这样我可以获得没有任何点的统一图?
所以基本上我正在寻找这个结果(这只是我在“挤压”上面的图片以显示所需的结果,而不是处理点之间的空格):
<<另一个选择是使用tricontourf创建x,y和z的填充图像。
请注意,散点图和tricontourf都不需要以任何顺序对点进行排序。如果确实将点分类到有序网格中,则plt.imshow
应该会给出最佳结果。
这里有一些代码说明它的外观。首先,生成一些与示例稍微相似的伪数据。由于x,y是随机的,因此它们不会填满整个空间。这可能会在散点图中留下一些空白点。可以很好地对轮廓f进行插值,但可能不在拐角处。
import numpy as np
import matplotlib.pyplot as plt
N = 50000
xmin = 0
xmax = 0.20
ymin = -0.01
ymax = 0.01
std_sorted = np.zeros((N, 3))
std_sorted[:,1] = np.random.uniform(xmin, xmax, N)
std_sorted[:,2] = np.random.choice(np.linspace(ymin, ymax, 80), N)
std_sorted[:,0] = np.cos(3*(std_sorted[:,1] - 0.04 - 100*std_sorted[:,2]**2))**10
fig, ax = plt.subplots(ncols=2)
# im = ax[0].scatter(std_sorted[:, 1], std_sorted[:, 2], s=20, c=std_sorted[:, 0], marker='|')
im = ax[0].scatter(std_sorted[:, 1], std_sorted[:, 2], s=5, c=std_sorted[:, 0], marker='.')
ax[0].set_xlim(xmin, xmax)
ax[0].set_ylim(ymin, ymax)
ax[0].set_title("scatter plot")
ax[1].tricontourf(std_sorted[:, 1], std_sorted[:, 2], std_sorted[:, 0], 256)
ax[1].set_title("tricontourf")
plt.tight_layout()
plt.show()