带有熊猫数据框的matplotlib.pyplot.scatter标签

问题描述 投票:-2回答:1

我有一个熊猫数据框,我想将其作为标签应用于散点图上的每个点。关于数据,它是对数据进行聚类,并且数据框包含指向每个点的标签以及它所属的聚类。将其投影到上面的散点图上将很有帮助。我尝试使用注释,并提出了错误。下面是我的散点图代码:

 import hdbscan
 import numpy as np
 import seaborn as sns
 import matplotlib.pyplot as plt
 import pandas as pd
 import umap 
 from sklearn.decomposition import PCA
 import sklearn.cluster as cluster
 from sklearn.metrics import adjusted_rand_score, 
 adjusted_mutual_info_score

 se1= umap.UMAP(n_neighbors = 20,random_state=42).fit_transform(data_1)

 cluster_1 = hdbscan.HDBSCAN(min_cluster_size = 15, min_samples =3).fit_predict(se1)
 clustered = (cluster_1 >=0)
 plt.scatter(se1[~clustered,0],se1[~clustered,1],c=(0.5,0.5,0.5), s=5, alpha =0.5)
 plt.scatter(se1[clustered,0], se1[clustered,1], c=cluster_1[clustered],s=5, cmap='prism');
 plt.show()

enter image description here

如何将df1(960行x 1列)作为标签添加到上述散点图中的所有点上?

  df1 = pd.DataFrame(cluster_1)
  plt.annotate(cluster_3,se3[clustered,0], se3[clustered,1])

*错误:“追踪(最近一次通话过去):文件“”,第1行,位于文件“ C:\ Users \ trivedd \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ matplotlib \ pyplot.py”,行2388,带有注释返回gca()。annotate(s,xy,* args,** kwargs)文件“ C:\ Users \ trivedd \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ matplotlib \ axes_axes.py”,行791,带有注释a = mtext.Annotation(s,xy,* args,** kwargs)包装中的文件“ C:\ Users \ trivedd \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ matplotlib \ cbook \ deprecation.py”,第307行return func(* args,** kwargs)init中的文件“ C:\ Users \ trivedd \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ matplotlib \ text.py”,行2166x,y = xytextValueError:太多值无法解包(预期2)“ *

python matplotlib label visualization scatter-plot
1个回答
1
投票
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import string
%matplotlib inline
df = pd.DataFrame({'x':np.random.rand(10),'y':np.random.rand(10),'label':list(string.ascii_lowercase[:10])})

df看起来像这样

x   y   label
0.854133    0.020296    a
0.320214    0.857453    b
0.470433    0.103763    c
0.698247    0.869477    d
0.366012    0.127051    e
0.769241    0.767591    f
0.219338    0.351735    g
0.882301    0.311616    h
0.083092    0.159695    i
0.403883    0.460098    j

尝试:

ax = df.plot(x='x',y='y',kind='scatter',figsize=(10,10))
df[['x','y','label']].apply(lambda x: ax.text(*x),axis=1)

给您这个:

enter image description here

或者如果您想使用图例:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np
import string
%matplotlib inline
df = pd.DataFrame({'x':np.random.rand(50), 'y':np.random.rand(50),'label': [int(x) for x in '12345'*10]})

fig, ax = plt.subplots(figsize=(5,5))
ax = sns.scatterplot(x='x',y='y',hue = 'label',data = df,legend='full',
                     palette = {1:'red',2:'orange',3:'yellow',4:'green',5:'blue'})
ax.legend(loc='lower left')

enter image description here

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