Изменить форму ручки эллипса в легенде - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь нанести метки некоторых контуров и эллипса в одну легенду.Я почти у цели (код ниже), но мне бы хотелось, чтобы фигура, связанная с эллипсом в легенде, была прямой линией, а не прямоугольником, как по умолчанию.

Как я могу изменитьэто?


import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

# Random data
ndim, nsamples = 2, 1000
samples = np.random.randn(ndim * nsamples).reshape([nsamples, ndim])

fig, ax = plt.subplots()
x, y = samples.T
H, X, Y = plt.hist2d(x, y, bins=20, cmap=plt.get_cmap('Greys'))[:-1]

# Plot two contours
contour = ax.contour(
    H.T, levels=(5, 10), extent=[x.min(), x.max(), y.min(), y.max()])

# Plot ellipse
ellipse = Ellipse(xy=(0., 0.), width=3., height=2, angle=45, edgecolor='r', fc='None', label='ellipse')
ax.add_patch(ellipse)

# Get ellipse's handle and label
ellip, ellip_lbl = ax.get_legend_handles_labels()

# Plot legend
plt.legend(ellip + list(reversed(contour.collections)), ellip_lbl + ['1s', '2s'])

plt.show()

enter image description here

1 Ответ

0 голосов
/ 27 октября 2018

Ниже приведено решение, основанное на этом ответе.Основная идея здесь - использовать ls="-",, создавая пустой список и захватывая его дескриптор.Сохраните патч эллипса в ax1 и используйте его для получения метки.

ellipse = Ellipse(xy=(0., 0.), width=3., height=2, angle=45, edgecolor='r', fc='None', label='ellipse')
ax1 = ax.add_patch(ellipse)

# Get ellipse's handle and label
ellip, ellip_lbl = ax.get_legend_handles_labels()

plt.legend(handles = [plt.plot([],ls="-", color='r')[0]] + list(reversed(contour.collections)),
           labels=[ax1.get_label()] + ['1s', '2s'])

enter image description here

...