matplotlib 图例多次显示相同的标签(使用标签向量)

时间:2021-02-08 17:34:09

标签: python matplotlib plot

[编辑:澄清。]

我想绘制多条线,其中一些线属于相同的材料,因此应该具有相同的颜色并共享相同的图例条目。 我为这些标签创建了一个名称向量,但 matplotlib 仍然为每一行分配一个单独的图例条目,尽管它们共享相同的名称字符串。
如何将一个类别的数据合并为一个图例条目?

示例
我希望描绘“治疗”的两条线具有相同的颜色并共享相同的图例条目:

import numpy as np
import matplotlib.pyplot as plt

a = np.array([[1.1, 1.7, 2.2, 3, 4.1, 5.5],
             [1, 2.2, 3.3, 4.4, 4.6, 5],
             [2.5, 3.8, 5.2, 7.3, 8.4, 8.5]])
x = np.linspace(0, 6, num=6)
names = ['Treatment', 'Treatment', 'Control']
for i in range (len(a)):
    plt.plot(x, a[i].T, label=names[i])
plt.legend()
plt.show()

example figure

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一种(可能太复杂)绘制每个唯一标签曲线的方法:

import numpy as np
import matplotlib.pyplot as plt

a = np.array([[1.1, 1.7, 2.2, 3, 4.1, 5.5],
              [1, 2.2, 3.3, 4.4, 4.6, 5],
              [2.5, 3.8, 5.2, 7.3, 8.4, 8.5]])
x = np.linspace(0, 6, num=6)
names = ['Treatment', 'Treatment', 'Control']

unique_names = np.unique(names)
colors = plt.cm.get_cmap('Set1').colors
for unique_name, color in zip(unique_names, colors):
    label = unique_name
    for ai, name in zip(a, names):
        if name == unique_name:
            plt.plot(x, ai.T, label=label, color=color)
            label = None  # set to None when used once
plt.legend()
plt.show()

example plot