Matplotlib - 散点图,如何填写每个单独点之间的 space?

Matplotlib - Scatter Plot, How to fill in the space between each individual point?

我正在绘制以下数据:

fig, ax = plt.subplots()
im = ax.scatter(std_sorted[:, [1]], std_sorted[:, [2]], s=5, c=std_sorted[:, [0]])

结果如下:

我的问题是:我可以通过外推然后相应地为外推 space 着色来填充图中每个点之间的 space,这样我得到一个没有任何点的统一图吗?

所以基本上我在寻找这个结果(这只是我 "squeezing" 上面的图片显示所需的结果而不是处理点之间的 space):

在这种情况下,最简单的做法是使用一条短垂直线标记,并将标记大小设置得足够大,这样就没有白色 space 了。

另一种选择是使用 tricontourf 创建 x、y 和 z 的填充图像。

请注意,散点图和 tricontourf 都不需要以任何顺序对点进行排序。 如果你确实将你的点排序到有序网格中,plt.imshow 应该会给出最好的结果。

这里有一些代码可以展示它的样子。首先生成一些与示例稍微相似的虚拟数据。由于 x,y 是随机的,因此它们不会填满 space。这可能会在散点图中留下一些空白点。这些点很好地插值到 contourf,除了可能在角落里。

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()