Условные обозначения Matplotlib для Scatter с пользовательскими цветами
-
07-07-2019 - |
Вопрос
Я немного новичок в этом и пытаюсь создать точечную диаграмму с пользовательскими размерами пузырьков и цветами.Диаграмма отображается нормально, но как мне получить легенду, в которой указано, к чему относятся цвета?Это все, что у меня есть:
inc = []
out = []
bal = []
col = []
fig=Figure()
ax=fig.add_subplot(111)
inc = (30000,20000,70000)
out = (80000,30000,40000)
bal = (12000,10000,6000)
col = (1,2,3)
leg = ('proj1','proj2','proj3')
ax.scatter(inc, out, s=bal, c=col)
ax.axis([0, 100000, 0, 100000])
ax.set_xlabel('income', fontsize=20)
ax.set_ylabel('Expenditure', fontsize=20)
ax.set_title('Project FInancial Positions %s' % dt)
ax.grid(True)
canvas=FigureCanvas(fig)
response=HttpResponse(content_type='image/png')
canvas.print_png(response)
Эта тема была полезной, но я не смог заставить ее решить мою проблему: Matplotlib:Надпись не отображается должным образом
Решение
Может быть, это пример это полезно.
В общем, предметы в легенде связаны с каким-то отображаемый объект.Тот Самый scatter
функция / метод обрабатывает все круги как единый объект, см.:
print type(ax.scatter(...))
Таким образом, решение состоит в создании нескольких объектов.Следовательно, вызывая scatter
несколько раз.
К сожалению, более новая версия matplotlib, похоже, не использует прямоугольник в легенде.Таким образом, легенда будет содержать очень большие круги, поскольку вы увеличили размер объектов точечной диаграммы.
Легенда функционирует как markerscale
аргумент ключевого слова для управления размером маркеров условных обозначений, но, похоже, он сломан.
Обновить:
Тот Самый Руководство по легендам рекомендует использовать Прокси - Исполнитель в подобных случаях.Тот Самый Цветовой API объясняет действительный fc
ценности.
p1 = Rectangle((0, 0), 1, 1, fc="b")
p2 = Rectangle((0, 0), 1, 1, fc="g")
p3 = Rectangle((0, 0), 1, 1, fc="r")
legend((p1, p2, p3), ('proj1','proj2','proj3'))
Чтобы получить цвета, использовавшиеся ранее на графике, используйте приведенный выше пример, например:
pl1, = plot(x1, y1, '.', alpha=0.1, label='plot1')
pl2, = plot(x2, y2, '.', alpha=0.1, label='plot2')
p1 = Rectangle((0, 0), 1, 1, fc=pl1.get_color())
p2 = Rectangle((0, 0), 1, 1, fc=pl2.get_color())
legend((p1, p2), (pl1.get_label(), pl2.get_label()), loc='best')
В этом примере будет создан сюжет, подобный:
Другие советы
Посмотрите на это:
http://matplotlib.sourceforge.net/api/pyplot_api .html # matplotlib.pyplot.legend
Надеюсь, это поможет. Если не просто попросить больше:)