2017-02-11 23 views
1

У меня есть список значений x и y и список назначений цветов для каждой точки («зеленый», «синий», «красный» и т. Д.). Все примеры, которые я нашел, создают легенду, основанную на отдельных командах plt.scatter(), которые в дальнейшем достаточно просто plt.legend(). making matplotlib scatter plots from dataframes in Python's pandas. Мой разброс не имеет отдельных рассеиваний для каждой цветной группы. Итак, как мне создать легенду, в которой отображаются цвета каждой группы?Как добавить легенду на график разброса, который имеет назначение цвета

import matplotlib.pyplot as plt 

colors = ["red", "orange", "green", "blue", "purple", "gray"] 
regions = ["Hanoi", "Nha Trang", "Vung Tau", "Phu Quoc", "Quang Ngai", "Saigon"] 
region_colors=dict(zip(regions,colors)) 

grp_color=[] 
for i in data['Region']: 
    grp_color.append(region_colors[i]) 

x_long=data[' Longitude'] 
y_lat=data[" Latitude"] 
plt.scatter(x_long,y_lat,c=grp_color) 
plt.legend(grp_color,regions,loc='right') 
+0

Логика обращенной здесь , Обычно самый простой способ создать легенду для графика разброса с разными цветами - это разбить данные вверх, отобразить графики разброса (или обычные графики) и использовать 'plt.legend()'. – ImportanceOfBeingErnest

+0

, так что я должен вернуться к фреймворку данных и разделить его, чтобы я мог строить каждую группу отдельно? –

+0

Это, безусловно, вариант. Вы также можете использовать мой ответ ниже. – ImportanceOfBeingErnest

ответ

0

Предполагая, что вы список цветов colors = ["blue", "red", "green"] и список регионов regions = ["Africa", "America", "Australia"] вы можете создать список условных обозначений ручек и использовать его для создания легенды:

handlelist = [plt.plot([], marker="o", ls="", color=color)[0] for color in colors] 
plt.legend(handlelist,regions,loc='right') 
+0

спасибо за ваше быстрое предложение, я получаю это сообщение об ошибке с вашим кодом: «ValueError: to_rgba: Invalid rgba arg« Islands » to_rgb: Неверный rgb arg« Острова » не смог преобразовать строку в float: 'Islands' ' –

+0

В моем коде нет «Островов»! – ImportanceOfBeingErnest

+0

ОК, потому что мой region_colors - это словарь, поэтому я заменил region_colors на region_colors.values ​​(), но легенда ничего не показывает, его просто белый квадрат –

 Смежные вопросы

  • Нет связанных вопросов^_^