Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在matplotlib中计算极坐标图密度_Python_Numpy_Matplotlib_Scipy_Data Visualization - Fatal编程技术网

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

Python 如何在matplotlib中计算极坐标图密度,python,numpy,matplotlib,scipy,data-visualization,Python,Numpy,Matplotlib,Scipy,Data Visualization,我正在尝试对我发布的图片1进行排序,以便最密集的点更清晰,指向我用于实现的答案的链接表明了我正在努力实现的目标 我的代码是: # 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

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

我的代码是:

# 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)
如果我不使用两行按密度排序的代码(注释掉),这就是我得到的结果

这是实现排序时的结果

我正试图实现一个类似的目标,如链接中的答案所示,因此图1更清晰,但我不明白为什么在排序时会得到下面的第二张图


谢谢。

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

密度必须在xy笛卡尔坐标上计算,使用极坐标会导致奇怪的距离值,请尝试在矩形图中绘制数据,然后将看到

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

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

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

密度必须在xy笛卡尔坐标上计算,使用极坐标会导致奇怪的距离值,请尝试在矩形图中绘制数据,然后将看到

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

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

谢谢您的回复,amp变量代表什么?第二个值“扫视振幅”是坐标,而方向是半径角,所以我很难从逻辑上理解转换,即xy=np.vstack([np.sin(扫视方向),np.cos(扫视振幅),PP)])是错误的np.vstack([np.sin(扫视方向)*扫视振幅,np sin(扫视方向)*扫视(振幅)是你的例子中的变换谢谢你的回答,amp变量代表什么?第二个值“扫视振幅”是坐标,而方向是半径角,所以我很难从逻辑上理解转换,即xy=np.vstack([np.sin(扫视方向),np.cos(扫视振幅),PP)])是错误的np.vstack([np.sin(扫视方向)*扫视振幅,np sin(扫视方向)*在您的示例中,扫视(振幅(PP))是变换