Подтвердить что ты не робот

Редактировать легенду о мореплавании

Используя фрейм данных и этот код в Python, я смог создать график:

g = sns.lmplot('credibility', 'percentWatched', data=data, hue = 'millennial', markers = ["+", "."], x_jitter = True, y_jitter = True, size=5)
g.set(xlabel = 'Credibility Ranking\n ← Low       High  →', ylabel = 'Percent of Video Watched [%]')

введите описание изображения здесь

Однако наличие легенды говорит "+ 0" и ". 1" не очень полезно для читателей. Как редактировать метки легенды? В идеале вместо того, чтобы говорить "тысячелетие", он говорил бы "поколение" и "+ тысячелетие". "Пожилые поколения"

4b9b3361

Ответ 1

Если legend_out установлено в True, тогда легенда доступна мышью g._legend и она является частью фигуры. Морская легенда - это стандартный объект легенды matplotlib. Поэтому вы можете изменить текст легенды, например:

import seaborn as sns

tips = sns.load_dataset("tips")
g = sns.lmplot(x="total_bill", y="tip", hue="smoker",
 data=tips, markers=["o", "x"], legend_out = True)

# title
new_title = 'My title'
g._legend.set_title(new_title)
# replace labels
new_labels = ['label 1', 'label 2']
for t, l in zip(g._legend.texts, new_labels): t.set_text(l)

sns.plt.show()

введите описание изображения здесь

Другая ситуация, если legend_out установлено на False. Вы должны определить, какие оси имеют легенду (в нижнем примере это номер оси 0):

import seaborn as sns

tips = sns.load_dataset("tips")
g = sns.lmplot(x="total_bill", y="tip", hue="smoker",
 data=tips, markers=["o", "x"], legend_out = False)

# check axes and find which is have legend
leg = g.axes.flat[0].get_legend()
new_title = 'My title'
leg.set_title(new_title)
new_labels = ['label 1', 'label 2']
for t, l in zip(leg.texts, new_labels): t.set_text(l)
sns.plt.show()

введите описание изображения здесь

Кроме того, вы можете комбинировать обе ситуации и использовать этот код:

import seaborn as sns

tips = sns.load_dataset("tips")
g = sns.lmplot(x="total_bill", y="tip", hue="smoker",
 data=tips, markers=["o", "x"], legend_out = True)

# check axes and find which is have legend
for ax in g.axes.flat:
    leg = g.axes.flat[0].get_legend()
    if not leg is None: break
# or legend may be on a figure
if leg is None: leg = g._legend

# change legend texts
new_title = 'My title'
leg.set_title(new_title)
new_labels = ['label 1', 'label 2']
for t, l in zip(leg.texts, new_labels): t.set_text(l)

sns.plt.show()

Этот код работает для любого морского сюжета, который основан на Grid class.