matplotlib:上相同的图2个不同的传说(matplotlib: 2 different le

2019-06-18 11:35发布

我有哪里不同的颜色用于不同参数的情节,并在不同的线条样式用于不同的算法。 我们的目标是比较相似的参数进行不同算法的结果。 这意味着在总的I使用4种不同的颜色,和3个不同的线型,对于在同一图上共有12个地块。

其实,我建立一个基于色彩的传说,与相应的参数每种颜色相关联。 现在,我想在同一个图形显示第二个传说,每行风格的含义。 这是可能实现的? 怎么样?

这里是我的代码看起来像实际上是:

colors = ['b', 'r', 'g', 'c']
cc = cycle(c)
for p in parameters:

    d1 = algo1(p)
    d2 = algo2(p)
    d3 = algo3(p)

    pyplot.hold(True)
    c = next(cc)
    pyplot.plot(d1, '-', color=c, label="d1")
    pyplot.plot(d1, '--', color=c)
    pyplot.plot(d2, '.-', color=c)

pyplot.legend()

Answer 1:

有对具体问题的matplotlib文档中的一个部分: http://matplotlib.org/users/legend_guide.html#multiple-legends-on-the-same-axes

以下是为您的具体示例代码:

import itertools
from matplotlib import pyplot

colors = ['b', 'r', 'g', 'c']
cc = itertools.cycle(colors)
plot_lines = []
for p in parameters:

    d1 = algo1(p)
    d2 = algo2(p)
    d3 = algo3(p)

    pyplot.hold(True)
    c = next(cc)
    l1, = pyplot.plot(d1, '-', color=c)
    l2, = pyplot.plot(d2, '--', color=c)
    l3, = pyplot.plot(d3, '.-', color=c)

    plot_lines.append([l1, l2, l3])

legend1 = pyplot.legend(plot_lines[0], ["algo1", "algo2", "algo3"], loc=1)
pyplot.legend([l[0] for l in plot_lines], parameters, loc=4)
pyplot.gca().add_artist(legend1)

下面是它的输出的例子:



Answer 2:

这里也有更多的“动手”的方式做到这一点(即与数字轴明确地交互):

import itertools
from matplotlib import pyplot

fig, axes = plt.subplot(1,1)

colors = ['b', 'r', 'g', 'c']
cc = itertools.cycle(colors)
plot_lines = []
for p in parameters:

    d1 = algo1(p)
    d2 = algo2(p)
    d3 = algo3(p)

    c = next(cc)
    axes.plot(d1, '-', color=c)
    axes.plot(d2, '--', color=c)
    axes.plot(d3, '.-', color=c)

# In total 3x3 lines have been plotted
lines = axes.get_lines()
legend1 = pyplot.legend([lines[i] for i in [0,1,2]], ["algo1", "algo2", "algo3"], loc=1)
legend2 = pyplot.legend([lines[i] for i in [0,3,6]], parameters, loc=4)
axes.add_artist(legend1)
axes.add_artist(legend2)

我喜欢写它,因为它允许潜在的较少模糊的方式与不同的轴玩这种方式。 你可以先创建传说集,然后将它们添加到您想要与方法“add_artist”轴。 此外,我开始matplotlib,并至少对我来说更容易理解脚本时OBJETS被explicited。

注意:小心,你的传说可能截止,同时显示/保存。 为了解决这个问题,使用方法axes.set_position([左边,底部,宽度,长度])来相对收缩的插曲的数字大小,使图例显示。



文章来源: matplotlib: 2 different legends on same graph