Как вы просто показываете текстовую метку в легенде сюжета? (например, удалить строку метки в легенде)
Я хочу показать текст метки строки в легенде, но не строку тоже (как показано на рисунке ниже):
Я попытался свести к минимуму строку и метку легенды и перезаписать только новую метку (как в коде ниже). Однако легенда возвращает обоих.
legend = ax.legend(loc=0, shadow=False)
for label in legend.get_lines():
label.set_linewidth(0.0)
for label in legend.get_texts():
label.set_fontsize(0)
ax.legend(loc=0, title='New Title')
5 ответов
На этом этапе, возможно, проще использовать annotate
,
Например:
import numpy as np
import matplotlib.pyplot as plt
data = np.random.normal(0, 1, 1000).cumsum()
fig, ax = plt.subplots()
ax.plot(data)
ax.annotate('Label', xy=(-12, -12), xycoords='axes points',
size=14, ha='right', va='top',
bbox=dict(boxstyle='round', fc='w'))
plt.show()
Однако, если вы хотите использовать legend
вот как ты это сделаешь. Вам нужно будет явно скрыть маркеры легенды в дополнение к установке их размера в 0 и удалению их отступов.
import numpy as np
import matplotlib.pyplot as plt
data = np.random.normal(0, 1, 1000).cumsum()
fig, ax = plt.subplots()
ax.plot(data, label='Label')
leg = ax.legend(handlelength=0, handletextpad=0, fancybox=True)
for item in leg.legendHandles:
item.set_visible(False)
plt.show()
Я нашел другое, гораздо более простое решение - просто установите масштаб маркера на ноль в свойствах легенды:
plt.legend(markerscale=0)
Это особенно полезно на точечных графиках, когда вы не хотите, чтобы маркер визуально принимался за истинную точку данных (или даже за выбросы!).
Вы можете просто установить handletextpad
а также handlelength
в легенде через legend_handler
как показано ниже:
import matplotlib.pyplot as plt
import numpy as np
# Plot up a generic set of lines
x = np.arange( 3 )
for i in x:
plt.plot( i*x, x, label='label'+str(i), lw=5 )
# Add a legend
# (with a negative gap between line and text, and set "handle" (line) length to 0)
legend = plt.legend(handletextpad=-2.0, handlelength=0)
Подробно на handletextpad
а также handlelength
находится в документации ( ссылка здесь и скопирована ниже):
handletextpad: float или None
Пэд между дескриптором легенды и текстом. Измеряется в единицах измерения размера шрифта. По умолчанию None, что будет принимать значение из rcParams [ "legend.handletextpad" ].
длина ручки: поплавок или нет
Длина легенды обрабатывает. Измеряется в единицах измерения размера шрифта. По умолчанию None, что будет принимать значение из rcParams["legend.handlelength"].
С кодом выше:
С несколькими дополнительными линиями метки могут иметь тот же цвет, что и их линии. просто используйте .set_color()
с помощью legend.get_texts()
,
# Now color the legend labels the same as the lines
color_l = ['blue', 'orange', 'green']
for n, text in enumerate( legend.texts ):
print( n, text)
text.set_color( color_l[n] )
Просто звоню plt.legend()
дает:
Suggesting the best answer: handlelength=0
, for example: ax.legend(handlelength=0)
.
Для пользовательских легенд также добавьте lw=0.
p5 = mpatches.Patch(color="green", label="r={}".format(cor_rh), lw=0)
p6 = mpatches.Patch(color=p1.get_color(), label="t={}".format(rh_trend), lw=0)
p7 = mpatches.Patch(color=p3.get_color(), label="t={}".format(hx_trend), lw=0)
ln1 = [p5,p6,p7]
host.legend(handles=ln1, loc=1, labelcolor='linecolor, handlelength=0)