如何在Matplotlib中计算极坐标图密度

时间:2019-03-09 15:28:09

标签: python numpy matplotlib scipy data-visualization

我正在尝试对发布的图片1进行排序,以使最密集的点更清晰,我用于实现的答案链接表明了我正在尝试实现的目标。

How can I make a scatter plot colored by density in matplotlib?

我的代码是:

# Calculate the point density: Saccade Orientation is an angle, Amplitude is supposed to be the Y value
xy = np.vstack([saccade_orientation_PP, saccade_amplitude_PP])
z = gaussian_kde(xy)(xy)

# Sort the points by density, so that the densest points are plotted last
idx = z.argsort()
x, y, z = np.array(saccade_orientation_PP)[idx], np.array(saccade_amplitude_PP)[idx], z[idx]

ax1 = plt.subplot(121, polar=True)
ax1.scatter(saccade_orientation_PP, saccade_amplitude_PP, c=z, edgecolor='', alpha = 0.75)

如果 我不 使用两行代码按密度对点进行排序(注释掉),则会得到此结果

Resulting image **without** values sorted by z

这是实施排序时的结果

Resulting image **with** values sorted by z

我正在尝试实现与链接答案中所显示的目标相似的图像,因此图像1清晰但无法理解,但为什么我对它进行排序后却得到下面的第二张图像。

谢谢。

1 个答案:

答案 0 :(得分:1)

这里的关键问题是极坐标的使用。

必须在xy直角坐标上计算密度,极坐标的使用会产生奇怪的距离值,请尝试将数据绘制在矩形图中,然后将看到。

可以在计算z值之前包括坐标变换。例如:

xy = np.vstack([np.sin(angle)*amp, np.cos(angle)*amp]) 
z = gaussian_kde(xy)(xy)