Условные обозначения Matplotlib для Scatter с пользовательскими цветами

StackOverflow https://stackoverflow.com/questions/1435535

  •  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')

В этом примере будет создан сюжет, подобный:

Matplotlib with custom legend

Другие советы

Посмотрите на это:

http://matplotlib.sourceforge.net/api/pyplot_api .html # matplotlib.pyplot.legend

Надеюсь, это поможет. Если не просто попросить больше:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top