Как добавить маркеры в легенду и график - matplotlib - PullRequest
0 голосов
/ 17 июня 2020

У меня есть следующий код:

from matplotlib import pyplot as plt
import seaborn as sns

fig = plt.figure()
fig.suptitle('Average GPA and Standard Deviation per course combination', fontsize=15)
plt.xlabel('Standard Deviation of Average GPA', fontsize=12)
plt.ylabel('Average GPA', fontsize=12)

colors = ['#E74C3C', '#76448A', '#3498DB', '#17A589', '#F1C40F', '#F39C12', '#CA6F1E', '#B3B6B7', '#34495E',
          '#F5B7B1']
marker = ['.','v','^','1','2','8','p','P','x','X']
g = sns.scatterplot(x=all_stdev, y=all_gpas, hue=final_courses)
g.legend(loc='center left', bbox_to_anchor=(1, 0.5), ncol=1)
plt.show()

all_stdev, all_gpas, final_courses являются списками и меняются каждый раз в зависимости от пользователя, так как это рекомендации для пользователя на основе ввода . Для конкретного студента я получаю следующий результат:

enter image description here

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

1 Ответ

0 голосов
/ 17 июня 2020

Вам нужно добавить маркеры и цвета в качестве параметра на диаграмму рассеяния. Есть еще одна проблема с маркерами. Сиборн жалуется: Маркеры с заливкой и штриховкой нельзя смешивать . Поэтому вам нужно выбрать либо заполненный, либо штриховой маркеры .

from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np

fig = plt.figure()
fig.suptitle('Average GPA and Standard Deviation per course combination', fontsize=15)
plt.xlabel('Standard Deviation of Average GPA', fontsize=12)
plt.ylabel('Average GPA', fontsize=12)

colors = ['#E74C3C', '#76448A', '#3498DB', '#17A589', '#F1C40F', '#F39C12', '#CA6F1E', '#B3B6B7', '#34495E', '#F5B7B1']
# marker = ['.', 'v', '^', '1', '2', '8', 'p', 'P', 'x', 'X']
marker = ['o', 'v', '^', '8', '*', 'P', 'D', 'X', 's', 'p']
N = 30
final_courses = np.random.randint(1,11, N) * 10
all_stdev = np.random.uniform(0, 2, N)
all_gpas = np.random.uniform(3, 4, N)
g = sns.scatterplot(x=all_stdev, y=all_gpas, hue=final_courses, style=final_courses, palette=colors, markers=marker)
g.legend(loc='center left', bbox_to_anchor=(1, 0.5), ncol=1)
plt.show()

example plot

...