Matplotlib绘图:如何让图例显示单个k值而非整个数组
解决方法
方法1:逐个绘制每个数据点
直接遍历x、y、k的每一组元素,单独绘制每个点并设置对应的标签。这样每个点都会在图例里占一个条目,不过如果k里有重复值,图例也会出现重复的标签。
代码示例:
import matplotlib.pyplot as plt k = [42., 64., 73., 31., 31., 31., 31., 2., 5., 16.] # 替换成你实际的x、y数组 x = [1,2,3,4,5,6,7,8,9,10] y = [2,4,6,8,10,12,14,16,18,20] for xi, yi, ki in zip(x, y, k): plt.plot(xi, yi, 'o', label=f'name{ki}') plt.legend() plt.show()
方法2:合并重复标签(更简洁)
如果k里有不少重复值,不想图例里一堆重复条目,可以先按k值把数据点分组,相同k值的点用同一种样式绘制,对应一个图例条目。
代码示例:
import matplotlib.pyplot as plt from collections import defaultdict k = [42., 64., 73., 31., 31., 31., 31., 2., 5., 16.] x = [1,2,3,4,5,6,7,8,9,10] y = [2,4,6,8,10,12,14,16,18,20] # 按k值把数据点分组 groups = defaultdict(list) for xi, yi, ki in zip(x, y, k): groups[ki].append((xi, yi)) # 每组数据单独绘制 for ki, points in groups.items(): xs, ys = zip(*points) plt.plot(xs, ys, 'o', label=f'name{ki}') plt.legend() plt.show()
两种方法的区别
- 方法1适合需要每个数据点都显示独立图例的场景,哪怕标签重复也会全部列出。
- 方法2适合重复标签多的情况,图例更干净,相同标签的点样式统一。
内容的提问来源于stack exchange,提问作者cat_herder
相关产品推荐
相关产品推荐

