使用matplotlib绘图时如何修改单个数据点的marker标记样式
解决方案
plt.plot() 批量传入所有坐标时仅支持设置统一的标记样式,要实现不同点位使用不同标记,需按点位单独指定标记样式后逐个绘制,修改后的完整代码如下:
import matplotlib.pyplot as plt import numpy as np plt.title('Map') plt.gca().invert_yaxis() RedLineNames = np.array(["Tub Gallery","Maul Gallery","Rocket Gallery","ClasseArt Gallery ","Wiseworlds Gallery"]) RedLineCoords = np.array([[3950, 4250],[1350,450],[3550, 3200],[2500, 2500],[400, 2750]]) # 自定义标记样式:第一个点圆形、第二个点正方形、其余点沿用原三角形 markers = ['o', 's'] + ['^'] * (len(RedLineCoords) - 2) for x, y, m in zip(RedLineCoords[:,0], RedLineCoords[:,1], markers): # 单独绘制每个标记点,关闭线型避免多余连线 plt.plot(x, y, marker=m, markersize=10, color='red', linestyle='') # 绘制红色连线 plt.plot(RedLineCoords[:,0], RedLineCoords[:,1], 'r-') # 添加点位名称标注 for i in range(len(RedLineCoords)): plt.text(RedLineCoords[i,0], RedLineCoords[i,1]+20, RedLineNames[i]) plt.show()
改动说明
- 删除了原代码中批量绘制统一三角形标记的语句
- 新增自定义标记列表,按需求设置前两个点的标记样式,其余点位保持原有三角形样式
- 遍历所有点位单独绘制标记,设置
linestyle=''避免单个点绘制时产生多余的短线段 - 原有连线逻辑、标注逻辑均保持不变,不影响原有显示效果
内容的提问来源于stack exchange,提问作者Bibyts
相关产品推荐
相关产品推荐

