Как добавить несколько легенд с разными маркерами в точечную диаграмму в python? - PullRequest
0 голосов
/ 17 марта 2020

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

import matplotlib.colors as mcolors
plt.figure(num=0, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

x=df.iloc[:,0:1].values
y=df.iloc[:,1:2].values
z=df.iloc[:,2:3].values

l=plt.scatter(x,y, c=z,cmap = mcolors.ListedColormap(["blue", "red"]),marker='+')
plt.xlabel('Exam 1 score',fontsize=14)
plt.ylabel('Exam 2 score',fontsize=14)
# Turn on the minor TICKS, which are required for the minor GRID
plt.minorticks_on()

# Customize the major grid
plt.grid(which='major', linestyle='-', linewidth='0.5', color='black')
# Customize the minor grid

plt.grid(which='minor', linestyle=':', linewidth='0.5', color='blue')
plt.legend((l,l),("Admitted", "Not Admitted"), loc="upper right")
plt.show()  

Но теперь я попытался добавить легенду как plt.legend((l,l),("Admitted", "Not Admitted"), loc="upper right"), результат такой, как показано на рис. Для этого я воспользовался здесь , они построили несколько графиков рассеяния, но для моего случая у меня есть только один график рассеяния.

enter image description here

Но, как показано на рисунке выше, цвет маркера одинаков для обоих маркеров в легенде. Поэтому мой вопрос заключается в том, как добавить несколько легенд с разными цветами маркеров или разными маркерами, используя plt.legend() в точечной диаграмме?

1 Ответ

2 голосов
/ 17 марта 2020

Начиная с matplotlib 3.1, вы можете использовать скаттер legend_elements() для облегчения создания легенды.

import matplotlib.colors as mcolors
plt.figure(num=0, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

x=np.random.random(size=(10,))
y=np.random.random(size=(10,))
z=np.random.choice([0,1], size=(10,))

s = plt.scatter(x,y, c=z,cmap = mcolors.ListedColormap(["blue", "red"]),marker='+')
plt.xlabel('Exam 1 score',fontsize=14)
plt.ylabel('Exam 2 score',fontsize=14)
# Turn on the minor TICKS, which are required for the minor GRID
plt.minorticks_on()

# Customize the major grid
plt.grid(which='major', linestyle='-', linewidth='0.5', color='black')
# Customize the minor grid

plt.grid(which='minor', linestyle=':', linewidth='0.5', color='blue')
h,l = s.legend_elements()
plt.legend(h,("Admitted", "Not Admitted"))

enter image description here

больше примеров здесь

...