Matplotlib-散点图,如何在每个点之间填充空格?

问题描述 投票:0回答:1

我正在绘制以下数据:

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 =“当前散点图的样子”>

我的问题是:我可以通过外推并随后对该外推空间进行着色来填充图中每个点之间的空间,这样我可以获得没有任何点的统一图?

所以基本上我正在寻找这个结果(这只是我在“挤压”上面的图片以显示所需的结果,而不是处理点之间的空格):

<<
python-3.x matplotlib scatter-plot
1个回答
1
投票
在这种情况下,最简单的方法是使用一条短的垂直线标记,然后将标记大小设置得足够大,以致不留空白。

另一个选择是使用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()

sample plot
© www.soinside.com 2019 - 2024. All rights reserved.