了解的默认用法`pylab.图例`

2024-04-20 03:42:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我用pylab制作这张图片: Image with messed up legend

传说不是我想要的。点代表实际的数据点,线是用polyfit制作的。我希望图例包含10个条目,每种颜色的线和点合并在一起,或者只包含10个点线。在

相关代码:

for i in range(start, start + size*chunks):
    colorVal = scalarMap.to_rgba(values[i])
    slc1, slc2 = start + i*size, start + (i+1)*size
    mylegend.append(" = ".join([self.dtypes[v1],
                              "%.2f" %data[v1, slc1]]))
    jx = data[x, slc1:slc2]
    jy = data[y, slc1:slc2]
    p  = np.polyfit(jx, jy, deg = 2)
    lx = np.linspace(jx[0], jx[-1], 1000)
    ly = p[0]*lx**2 + p[1]*lx + p[2]
    pl.plot(jx, jy, "o", color = colorVal)
    pl.plot(lx, ly, color = colorVal)
pl.xlabel(self.dtypes[x])
pl.ylabel(self.dtypes[y])
pl.title(title)
pl.axis(axis)
pl.legend(my_legend, loc = "upper left", shadow = True)
pl.grid("on")
pl.show()

我意识到错误是什么:我在my_legend列表中添加了10个点,pylab的legend函数从中读取,直到列表结束。因此,只有一半的人成功了。但是,我不知道怎么解决它。有没有办法让legend函数在循环的每次迭代中只注册一个条目?在

另外,我想按相反的顺序列出要点。我试过了

^{pr2}$

但那没用。在

对这两个问题有什么看法?在


Tags: selfdatasizestartpllxjxlegend
1条回答
网友
1楼 · 发布于 2024-04-20 03:42:32

一旦您理解了pylab.legend的工作原理,它的行为就是适当的。调用pylab.legend(my_legend, ...)时,标签的字符串列表与绘制的前10行相关联。按照你的方法,前10行是在前5个循环中添加的那一行。 要显示点,可以执行以下操作:

for i in range(start, start + size*chunks):
    [...]
    label = " = ".join([self.dtypes[v1], "%.2f" %data[v1, slc1]])
    [...]
    pl.plot(jx, jy, "o", color = colorVal, label=label)
    pl.plot(lx, ly, color = colorVal)

[...]
pl.legend(loc = "upper left", shadow = True)

如果需要这些线的图例,只需将label=label放入另一个plot命令。在

另一种方法是创建一个mylines列表(类似于mylegend),只附加一个plot命令,然后调用pl.legend(mylines, mylegend, ...)

相关问题 更多 >