我有此散点图(我知道那是一团糟!),我正在尝试更改标记旁边的文本的颜色和大小,以匹配标记的颜色和大小。在这种情况下,绿色点旁边的文本将为绿色,橙色点旁边的文本将为橙色。理想情况下,我也可以将文本缩小。
我用来生成下面的散点图的代码是:
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())
非常感谢您的帮助:)
答案 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)