Я использую matplotlib для построения диаграммы рассеяния. Мои данные имеют координаты x и y точек, которые я рисую, а также значение "count", которое принимает значения от 1 до 29. Чтобы представить "счетчик" в легенде, я использую 3 различных способа, как указано ниже.
a) Размер точки разброса
б) Цвет точки разброса
c) Отметка X на альтернативном «count»
Так как всего 29 отсчетов, я ожидаю 29 записей в легенде. Однако, похоже, есть ограничение на количество записей легенды - 8. Есть ли способ гарантировать, что я могу показать все 29 записей легенды. Код, который у меня есть, приведен ниже
point = cluster_actual_crashes
# point.geometry gives x and y coordinates
# point['count'] gives the count value for that data point
scatter = plt.scatter(point.geometry.x, point.geometry.y,
edgecolors = 'black',
linewidths = 2,
c=point['count'],
s=100*point['count'].values^2,
cmap = 'hsv',#Cyclic colormapshttps://matplotlib.org/3.1.0/tutorials/colors/colormaps.html
alpha = 0.5)
# point_plus are the points which are marked with 'X'
point_plus = point[point['count'].isin(point['count'].value_counts().index[::2])]
scatter_plus = plt.scatter(point_plus.geometry.x, point_plus.geometry.y,
marker = "x",
s=80*point_plus['count'].values^2 )
# https://matplotlib.org/3.1.1/tutorials/intermediate/legend_guide.html
handles, labels = scatter.legend_elements(prop='sizes')
handles2, _ = scatter.legend_elements(prop='colors')
handles_plus, _ = scatter_plus.legend_elements(prop='sizes')
handles_final = []
for i, handle in enumerate(handles):
handles[i].set_c(handles2[i].get_c())
handles[i].set_linewidth(2)
handles[i].set_markeredgecolor('black')
if ((i+1)%2 == 1):
# print(int((i-1)/2))
handles_final.append((handles[i],handles2[i], handles_plus[int((i-1)/2)]))
else:
handles_final.append((handles[i],handles2[i]))
# handles[i].set_markeredgecolor('red')
labels = [str(i) for i in set(point['count'].values)]
# Add a title to legend with title keyword
plt.legend(handles_final, labels, title='Number of Crashes',
loc='upper left', bbox_to_anchor=(1.04, 0.25, 0.5, 0.5),
labelspacing=2,
borderpad=1.5,
title_fontsize=titlefontsize*0.9,
fontsize = titlefontsize*0.9)
Спасибо,