简体   繁体   English

用熊猫数据框标记 matplotlib.pyplot.scatter

[英]Labeling matplotlib.pyplot.scatter with pandas dataframe

I have a pandas dataframe which I want to apply as labels to each point on a scatter plot.我有一个熊猫数据框,我想将其作为标签应用于散点图上的每个点。 With respect to data, it is clustering data and the dataframe contains labels to each point and in which cluster it belongs.关于数据,它是对数据进行聚类,数据帧包含每个点的标签以及它属于哪个集群。 Would be helpful to project that on scatter plot above.将有助于将其投影到上面的散点图上。 I tried using annotate and came up with error.我尝试使用 annotate 并出现错误。 Below is my code for scatter plot:下面是我的散点图代码:

 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()

在此处输入图片说明

How can I add df1 (960 rows x 1 column) as label to all points in above scatter plot?如何将 df1(960 行 x 1 列)作为标签添加到上述散点图中的所有点?

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

*Error: "Traceback (most recent call last): File "", line 1, in File "C:\\Users\\trivedd\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py", line 2388, in annotate return gca().annotate(s, xy, *args, **kwargs) File "C:\\Users\\trivedd\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\axes_axes.py", line 791, in annotate a = mtext.Annotation(s, xy, *args, **kwargs) File "C:\\Users\\trivedd\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\cbook\\deprecation.py", line 307, in wrapper return func(*args, **kwargs) File "C:\\Users\\trivedd\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\text.py", line 2166, in init x, y = xytext ValueError: too many values to unpack (expected 2)"* *错误:“回溯(最近一次调用):文件“”,第 1 行,在文件“C:\\Users\\trivedd\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py”中,第 2388 行,在注释中返回 gca().annotate(s, xy, *args, **kwargs) File "C:\\Users\\trivedd\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\axes_axes. py", line 791, in annotate a = mtext.Annotation(s, xy, *args, **kwargs) File "C:\\Users\\trivedd\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\ cbook\\deprecation.py", line 307, in wrapper return func(*args, **kwargs) File "C:\\Users\\trivedd\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\text.py “,第 2166 行,在init x, y = xytext ValueError: 解包的值太多(预期为 2)”*

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])})

a df looks like this 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

Try:尝试:

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

gets you this:给你这个:

在此处输入图片说明

Or if you want to use legend:或者,如果您想使用图例:

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')

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM