我有一个带有距离矩阵的熊猫镜架,我使用PCA进行调暗。该距离矩阵的数据框具有每个点的标签和大小。
如何使每个散乱点变成一个圆,其大小取决于数据框的大小
````
pca = PCA(n_components=2)
pca.fit(dist)
mds5 = pca.components_
fig = go.Figure()
fig.add_scatter(x = mds5[0],
y = mds5[1],
mode = 'markers+text',
marker= dict(size = 8,
color= 'blue'
),
text= dist.columns.values,
textposition='top right')
````
我需要使散点图看起来像此示例,但是,当我在相关答案中为每个点添加大小时,我无法使圆重叠,并且当它们重叠时,我可以放大,然后将它们不再重叠
听起来很奇怪,但是我需要创建一个逻辑,即如果两个圆重叠,那么半径较小的圆就会消失,所以:
答案 0 :(得分:1)
我仍然不确定要在圆圈大小中反映哪个PCA参数,但是:您要么想要
ax.scatter()
)来反映您选择的PCA参数;重新缩放图形时,此尺寸将(并且不应)重新缩放;它也未给出,以(x,y)单位size=
补丁,其半径以(x,y)单位给出;然后在重新缩放时点重叠是一致,但这可能会导致点变形我想您想要基于plt.Circle((x,y), radius=radius, **kwargs)
的解决方案,因为它保持距离 static ,然后您需要“手动”预先计算两个点是否重叠并“手动”删除它们”。您应该能够通过比较点大小(即plt.Circle
,即PCA参数)和数据点之间的欧式距离(即radius
)来自动执行此操作。
要使用圈子,您可以例如定义一个简写函数:
np.sqrt(dx**2 + dy**2)
,然后使用可选参数(即x和y坐标,颜色等)进行调用:
def my_circle_scatter(ax, x_array, y_array, radius=0.5, **kwargs):
for x, y in zip(x_array, y_array):
circle = plt.Circle((x,y), radius=radius, **kwargs)
ax.add_patch(circle)
return True
我使用my_circle_scatter(ax, xs, ys, radius=0.2, alpha=.5, color='b')
分别创建图形和子图的地方。