如何让循环中两组绘图线条共用颜色与图例标签
Matplotlib同组线条同色+图例不重复的实现方法
问题场景
需要绘制两组时间序列数据:x1与y1、x2与y2。其中x是时间向量,y1、y2均为行数与x匹配、包含5列的矩阵,每列对应一条独立线条。
原代码如下:
for i in range(5): plt.plot(x1,y1[:,i],x2,y2[:,i],label=labels[i]) plt.legend()
当前问题:每次循环里的两组线条颜色不同,且图例中每个标签重复显示两次。
解决方法
核心思路:让同一次循环中的两条线条共享同一颜色,且仅为其中一条添加图例标签。
修改后的代码:
import matplotlib.pyplot as plt # 假设x1、x2、y1、y2、labels已提前定义 for i in range(5): # 绘制第一组数据,获取线条对象并设置图例标签 line, = plt.plot(x1, y1[:, i], label=labels[i]) # 复用第一条线的颜色绘制第二组数据,不设置标签 plt.plot(x2, y2[:, i], color=line.get_color()) plt.legend() plt.show()
原理说明
- 调用
plt.plot()绘制单条线时,会返回包含线条对象的元组,用line,解包出单个线条对象 - 通过
line.get_color()获取该线条的颜色,将其传给第二组数据的color参数,实现同组线条颜色一致 - 仅为第一组线条设置
label,第二组不设置,避免图例重复
内容的提问来源于stack exchange,提问作者HWIK
相关产品推荐
相关产品推荐

