回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在使用matplotlib制作散点图。我的数据有我正在绘制的点的x和y坐标,还有一个“计数”值,取值范围为1到29。为了表示图例中的“计数”,我使用下面给出的3种不同方式</p>
<p>a)分散点的大小</p>
<p>b)散射点的颜色</p>
<p>c)备选“计数”上的X标记</p>
<p>由于有29个计数,我希望图例中有29个条目。然而,似乎图例条目的数量上限为8。是否有办法确保我可以显示所有29个图例条目。到目前为止,我的代码如下所示</p>
<pre><code>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)
</code></pre>
<p>谢谢</p>