Python 将近散射点合并为一个并增大其大小

Python 将近散射点合并为一个并增大其大小,python,pandas,pandas-groupby,scatter-plot,Python,Pandas,Pandas Groupby,Scatter Plot,我有三个变量RZ,PRP和TC。我在它们之间画了一个颜色变化的散点图。RZ在0-800之间变化,PRP在0-4000之间,TC在0-100之间变化。代码和下图: fig = plt.figure(figsize=(12, 10)) points = plt.scatter(RZS_P.PRP, RZS_P.RZ, c=RZS_P.TC, cmap="Spectral", lw=1, s = 60 , vmax = 100, vmin =0, alpha = 0.7, edgecolors= '

我有三个变量
RZ
PRP
TC
。我在它们之间画了一个颜色变化的散点图。RZ在0-800之间变化,PRP在0-4000之间,TC在0-100之间变化。代码和下图:

fig = plt.figure(figsize=(12, 10))
points = plt.scatter(RZS_P.PRP, RZS_P.RZ, c=RZS_P.TC, cmap="Spectral", 
lw=1, s = 60 , vmax = 100, vmin =0, alpha = 0.7, edgecolors= 'b')
plt.colorbar(points)

我想做的是将附近的一些相同的观察点与PRP(±250)、RZ(±50)和TC(±5)[或类似的东西]组合为一个点,并增加其大小。这将提供比下面散点图更好的可视化效果基本上,我试图实现的是通过取其平均值,然后绘制它,将分散点与近似值(或范围或箱子内的值)结合起来。

我提出的一些代码在下面提到了(虽然这只增加了它们重叠时的散布的大小,而不考虑邻居):


如果您的
final_散射
数据帧结构良好,具有一条预期椭圆线:

final_scatters = pd.DataFrame({'PRP': x, 'RZ': y, 'TC': z, 'height': height, 'width': width, 'size': size})
#final_scatters looks like this
    PRP         RZ          TC           height      width      size
22  84.423500   91.315781   2.492503    17.500629   18.499458   2.0
33  61.671188   137.650848  1.305071    18.169079   20.138525   6.0
143 53.673630   634.536926  3.443243    1.000000    1.000000    1.0
231 202.459641  62.480145   2.156926    8.962382    46.061661   21.0
242 217.588333  98.111694   2.011893    15.964933   59.468643   20.0
您可以逐行遍历它并绘制椭圆:

fig, ax = plt.subplot()

for i, row in final_scatters.iterrows():
    ax.add_artist(Ellipse(
        xy = (row['PRP'], row['RZ']),
        width = row['width'], 
        height = row['height'],
        alpha = 0.5  # in case you want some transparency 
    ))

如果您的
final_散射
数据帧结构良好,具有一条预期椭圆线:

final_scatters = pd.DataFrame({'PRP': x, 'RZ': y, 'TC': z, 'height': height, 'width': width, 'size': size})
#final_scatters looks like this
    PRP         RZ          TC           height      width      size
22  84.423500   91.315781   2.492503    17.500629   18.499458   2.0
33  61.671188   137.650848  1.305071    18.169079   20.138525   6.0
143 53.673630   634.536926  3.443243    1.000000    1.000000    1.0
231 202.459641  62.480145   2.156926    8.962382    46.061661   21.0
242 217.588333  98.111694   2.011893    15.964933   59.468643   20.0
您可以逐行遍历它并绘制椭圆:

fig, ax = plt.subplot()

for i, row in final_scatters.iterrows():
    ax.add_artist(Ellipse(
        xy = (row['PRP'], row['RZ']),
        width = row['width'], 
        height = row['height'],
        alpha = 0.5  # in case you want some transparency 
    ))

我认为这里有几个问题。如果我理解正确,首先需要对数据点进行聚类和/或排除异常值。只有这样,才能将簇聚合为唯一的圆并计算它们的值size@Vincent. 我不想排除异常值,但我想基于3个变量对数据点进行聚类。我需要一个动态编码方案,如前所述‘将附近的一些相同的观察点与PRP(±100)、RZ(±50)和TC(±5)结合起来’。我想你已经明白了要点。我没有编码基于3个变量的聚类点的能力。您能提供一些帮助或见解吗?出于绘图目的,我认为您需要集群。在您的示例中,从10个黄色点到2个黄色圆圈。我的术语是集群,我真的不知道你还能做什么do@Vincent. 对不起,让我换一种说法。事实上,我并没有试图聚集,我分散的形状与问题无关。让我在上面添加一些附加信息。那么这只是一个密谋问题吗?你看到这个了吗?我认为这里有几个问题。如果我理解正确,首先需要对数据点进行聚类和/或排除异常值。只有这样,才能将簇聚合为唯一的圆并计算它们的值size@Vincent. 我不想排除异常值,但我想基于3个变量对数据点进行聚类。我需要一个动态编码方案,如前所述‘将附近的一些相同的观察点与PRP(±100)、RZ(±50)和TC(±5)结合起来’。我想你已经明白了要点。我没有编码基于3个变量的聚类点的能力。您能提供一些帮助或见解吗?出于绘图目的,我认为您需要集群。在您的示例中,从10个黄色点到2个黄色圆圈。我的术语是集群,我真的不知道你还能做什么do@Vincent. 对不起,让我换一种说法。事实上,我并没有试图聚集,我分散的形状与问题无关。让我在上面添加一些附加信息。那么这只是一个密谋问题吗?你看到这个了吗?谢谢,文森特。似乎我丢失了
plt.axis([-54000,-5900])
,这在使用
补丁时非常麻烦(即使使用了您的代码)。谢谢,Vincent。似乎我缺少了
plt.axis([-54000,-5900])
,这在使用
补丁时非常麻烦(即使使用了您的代码)。
final_scatters = pd.DataFrame({'PRP': x, 'RZ': y, 'TC': z, 'height': height, 'width': width, 'size': size})
#final_scatters looks like this
    PRP         RZ          TC           height      width      size
22  84.423500   91.315781   2.492503    17.500629   18.499458   2.0
33  61.671188   137.650848  1.305071    18.169079   20.138525   6.0
143 53.673630   634.536926  3.443243    1.000000    1.000000    1.0
231 202.459641  62.480145   2.156926    8.962382    46.061661   21.0
242 217.588333  98.111694   2.011893    15.964933   59.468643   20.0
fig, ax = plt.subplot()

for i, row in final_scatters.iterrows():
    ax.add_artist(Ellipse(
        xy = (row['PRP'], row['RZ']),
        width = row['width'], 
        height = row['height'],
        alpha = 0.5  # in case you want some transparency 
    ))