matplotlib 向seaborn.relplot中的每个点添加文本

nwnhqdif  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(171)

我使用下面的代码来生成一个relplot

df = pd.read_csv(r"train.csv")
df.head()
p1=sns.relplot(x="OS_Packages",y="Vulnerabilities",hue="OS_Distro",
               size="High_Vulnerabilities",sizes=(400,1000), data = df)
plt.show()

我需要给图中的每个点添加文本。我该怎么做?我已经搜索过了,但只得到了regplot.的结果,我正在寻找添加文本到relplot的点。

pprl5pva

pprl5pva1#

正如在answer中提到的,您必须访问relplot返回的FacetGrid的轴。
简单复制您的问题,并注明一点:

import seaborn as sns
import pandas as pd

d = {'OS_Packages':[0,1,2,4], 'Vulnerabilities': [6,7,3,7], 
     'text':['point1','point2','point3','point4']}
df = pd.DataFrame(d)

p1 = sns.relplot(x='OS_Packages', y='Vulnerabilities',data=df )
ax = p1.axes[0,0]
for idx,row in df.iterrows():
    x = row[0]
    y = row[1]
    text = row[2]
    ax.text(x+.05,y,text, horizontalalignment='left')

这将返回以下内容:

ykejflvf

ykejflvf2#

您可以使用seaborn.objects来避免循环。下面是一个例子,使用了与jtweeder的答案相同的数据:

import seaborn.objects as so
d = {'OS_Packages':[0,1,2,4], 'Vulnerabilities': [6,7,3,7], 
 'text':['point1','point2','point3','point4']}
df = pd.DataFrame(d)
so.Plot(data=df,x='OS_Packages',y='Vulnerabilities',text='text').add(so.Dots()).add(so.Text(valign='top'))

相关问题