matplotlib: несколько легенд в каждом отдельном сюжете - PullRequest
0 голосов
/ 26 января 2020

Я знаю, как разбить легенду о сюжете на две отдельные легенды:

x = np.linspace(0,1)
y1 = x
y2 = 2*x

fig, ax = plt.subplots()
fig.set_size_inches((8,8))

points = []
pnts = ax.scatter(x, y1, c='b')
points.append(pnts)
pnts = ax.scatter(x, y2, marker='v', c='r')
points.append(pnts)

leg1 = plt.legend([points[0]], ['blue'],\
                  loc=2, ncol=1, fancybox=False, shadow=False, framealpha=0.0, fontsize = 25)

leg2 = plt.legend([points[1]], ['red'],\
                  loc=4, ncol=1, fancybox=False, shadow=False, framealpha=0.0, fontsize = 25)

ax.add_artist(leg1)
ax.add_artist(leg2)

Это дает прекрасную фигуру, которую вы ожидаете:

Figure

Что мне нужно сделать, так это расширить этот метод на несколько вспомогательных участков на одном рисунке. Я думал, что естественное расширение будет

x = np.linspace(0,1)
y1 = x
y2 = 2*x

fig, ax = plt.subplots(1, 2, sharex = False, sharey = False)
fig.set_size_inches((16,8))


#################


points = []
pnts = ax[0].scatter(x, y1, c='b')
points.append(pnts)
pnts = ax[0].scatter(x, y2, marker='v', c='r')
points.append(pnts)

leg1 = plt.legend([points[0]], ['blue'],\
                  loc=2, ncol=1, fancybox=False, shadow=False, framealpha=0.0, fontsize = 25)

leg2 = plt.legend([points[1]], ['red'],\
                  loc=4, ncol=1, fancybox=False, shadow=False, framealpha=0.0, fontsize = 25)

ax[0].add_artist(leg1)
ax[0].add_artist(leg2)


#################


points = []
pnts = ax[1].scatter(x, y1, c='g')
points.append(pnts)
pnts = ax[1].scatter(x, y2, marker='orange', c='r')
points.append(pnts)

leg1 = plt.legend([points[0]], ['green'],\
                  loc=2, ncol=1, fancybox=False, shadow=False, framealpha=0.0, fontsize = 25)

leg2 = plt.legend([points[1]], ['orange'],\
                  loc=4, ncol=1, fancybox=False, shadow=False, framealpha=0.0, fontsize = 25)

ax[1].add_artist(leg1)
ax[1].add_artist(leg2)

К сожалению, я получаю

ax [0] .add_artist (leg1) ValueError: Невозможно сбросить оси. Возможно, вы пытаетесь повторно использовать художника в нескольких осях, которые не поддерживаются

Похоже, его нельзя использовать с несколькими вспомогательными сюжетами ... Даже если что-то, что меня удивляет заключается в том, что ошибка выдается в первый раз, когда я пытаюсь вызвать add_artist.

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

...