每个数据点上的不同文本的散点图与标记的大小和颜色匹配

时间:2020-01-29 11:56:14

标签: python seaborn scatter-plot

我有此散点图(我知道那是一团糟!),我正在尝试更改标记旁边的文本的颜色和大小,以匹配标记的颜色和大小。在这种情况下,绿色点旁边的文本将为绿色,橙色点旁边的文本将为橙色。理想情况下,我也可以将文本缩小。

我用来生成下面的散点图的代码是:

  plot = plt.figure(figsize=(30,20))
ax = sns.scatterplot(x='Recipients', y='Donors', data=concatenated, hue = 'Cost of Transfer',
                     palette="Set2", s= 300)

def label_point(x, y, val, ax):
    a = pd.concat({'x': x, 'y': y, 'val': val}, axis=1)
    for i, point in a.iterrows():
        ax.text(point['x']+.1, point['y'], str(point['val']))

label_point(concatenated.Recipients, concatenated.Donors, concatenated.Species, plt.gca())

enter image description here

非常感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

图中的文本由ax.text(),matplotlib axes.text设置。

# Before
ax.text(point['x']+.1, point['y'], str(point['val']))
# After
ax.text(point['x']+.1, point['y'], str(point['val']), {'color': 'g', 'fontsize': 20})

尝试使用喜欢的颜色和字体大小。

答案 1 :(得分:0)

尝试在sns.scatterplot()中查找点的颜色会非常复杂,并且可能容易出错。您真的需要使用scatterplot()吗?

如果没有,我建议您忘掉seaborn,而直接使用matplotlib创建图,这将为您提供更多控制权:

iris = sns.load_dataset("iris")
iris['label'] = 'label_'+iris.index.astype(str) # create a label for each point

df = iris
x_col = 'sepal_length'
y_col = 'sepal_width'
hue_col = 'species'
label_col = 'label'
palette = 'Set2'
size = 5

fig, ax = plt.subplots()
colors = matplotlib.cm.get_cmap(palette)(range(len(df[hue_col].unique())))
for (g,temp),c in zip(iris.groupby('species'),colors):
    print(g,c)
    ax.plot(temp[x_col], temp[y_col], 'o', color=c, ms=size, label=g)
    for i,row in temp.iterrows():
        ax.annotate(row[label_col], xy=(row[x_col],row[y_col]), color=c)
ax.set_xlabel(x_col)
ax.set_ylabel(y_col)
ax.legend(title=hue_col)

enter image description here