我不得不重新排序图例中的项目,而我认为我不应该这样做。我尝试:
from pylab import *
clf()
ax=gca()
ht=ax.add_patch(Rectangle((1,1),1,1,color='r',label='Top',alpha=.1))
h1=ax.bar(1,2,label='Middle')
hb=ax.add_patch(Rectangle((1,1),1,1,color='k',label='Bottom',alpha=.11))
legend()
show()
最后底部在中间之上。我怎么才能得到正确的顺序?不是由创建顺序决定的吗?
更新:下面可以用来强制顺序,我想这可能是最简单的方法,那看起来很尴尬,问题是什么决定了最初的顺序?
hh=[ht,h1,hb]
legend([ht,h1.patches[0],hb],[H.get_label() for H in hh])
7条答案
按热度按时间dzhpxtsq1#
与其他一些图例稍有不同。列表
order
的长度应该与图例项的数量相同,并手动指定新的顺序。gwo2fgha2#
下面是一个对图例中的条目进行排序的简短代码片段。它假设您已经添加了带有标签的绘图元素,例如,类似于
然后是主位:
这只是对http://matplotlib.org/users/legend_guide.html中列出的代码的简单修改
f4t66c6m3#
顺序是确定的,但部分私有guts可以随时更改,请看这里的代码,它会转到这里,最后到这里。孩子是已经添加的艺术家,因此句柄列表是按照他们添加的顺序排序的(这是mpl34或mpl35的行为变化)。
如果您想显式控制图例中元素的顺序,那么就像在编辑中一样,组装一个处理程序和标签的列表。
zqdjd7g94#
以下函数使图例顺序的控制变得容易且可读。
您可以指定您想要的标签顺序。它将查找图例句柄和标签,删除重复的标签,并根据您给定的列表(
order
)对它们进行排序或部分排序。因此,您可以这样使用它:详情如下。
更新形式的函数位于
cpblUtilities.mathgraph
中的https://gitlab.com/cpbl/cpblUtilities/blob/master/mathgraph.py因此用法如下:
可选的
unique
参数可确保删除具有相同标签的重复打印对象。w8f9ii695#
借鉴IanHincks的answer,图例元素顺序的更改可以通过嵌套列表解析在一行中完成,这避免了命名中间变量的需要,减少了代码重复。
我在结尾处加入了一些额外的参数,以说明不需要单独调用
plt.legend()
函数来设置元素的格式和排序。1sbrub3j6#
根据另一个列表对标签进行排序的简单方法如下所示:将所有绘图和标签添加到轴后,在显示标签前执行以下步骤。
示例:
对于具有如下值的运行:
标签应该按照红色、绿色和蓝色的顺序排列,因为它们在图中是按照这个顺序排列的,但我们希望根据平均值对它们进行排序,这将给我们一个绿色、蓝色和红色的顺序。
Check this image
nvbavucw7#
我在一张图中有几个相同主题的图,当我尝试根据上面的答案改变标签时,我发现并排的图会以相同标签的不同颜色结束。
因此,对我来说最简单的解决方案是在创建绘图之前按所需的标签排序:
这当然需要排序,所以你决定它是否适用于你的情况。另外,如果你需要标签文本与
class_column
不同,那么你可能需要添加更多的代码。