如何修改ax.scatter代码为单个绘图点设置不同标记形状?
解决Matplotlib为单个点设置不同标记的问题
问题原因
Matplotlib的scatter()函数的marker参数不支持直接传入标记序列,它仅接受单个标记样式字符串,所以你直接传marker=('o','d','v','^','x')的写法不会生效。
解决方案
方案一:循环逐个绘制点
通过遍历每个数据点,单独调用scatter()来设置每个点的标记样式,这是最直观的方式:
markers = ('o','d','v','^','x') colors = ['k','b','g','r','m'] # 遍历每个点的坐标、标记和颜色 for x, y, m, c in zip(data1[0], data1[1], markers, colors): ax1.scatter(x, y, marker=m, s=20, color=c, edgecolors=c)
方案二:使用plot()函数一次性绘制
plot()函数支持传入标记序列,只需设置linestyle=''隐藏连线,只保留标记:
markers = ('o','d','v','^','x') colors = ['k','b','g','r','m'] ax1.plot(data1[0], data1[1], linestyle='', markerfacecolor=colors, markeredgecolor=colors, markersize=5, marker=markers)
注意:两种方法中,
markers和colors的长度要和数据点的数量保持一致,否则会出现样式循环或不匹配的问题。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

