我有哪里不同的颜色用于不同参数的情节,并在不同的线条样式用于不同的算法。 我们的目标是比较相似的参数进行不同算法的结果。 这意味着在总的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()
有对具体问题的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)
下面是它的输出的例子:
这里也有更多的“动手”的方式做到这一点(即与数字轴明确地交互):
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([左边,底部,宽度,长度])来相对收缩的插曲的数字大小,使图例显示。