仅显示图例Python Matplotlib中的某些项目


75

我目前正在绘制大量生物分类数据的堆叠条形图,只希望在图例中显示重要物种(在约500种中,我希望显示约25种)。有没有简单的方法可以做到这一点?下面是我的代码:

labels=['0','20','40','60','80','100','120']
ax1=subj1df.plot(kind='barh', stacked=True,legend=True,cmap='Paired', grid=False)
legend(ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.)
label1=['Baseline','8h','24h','48h','96h','120h']
ax1.set_yticklabels(label1, fontdict=None, minor=False)
plt.title('Subject 1 Phyla',fontweight='bold')
plt.savefig('Subject1Phyla.eps', format='eps', dpi=1000)
ax1.set_xticklabels(labels)

编辑:尝试将其添加为仅显示一个图例条目,但是仅返回一个空图例:

h, l = ax1.get_legend_handles_labels()
legend(l[4],h[4],ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.)

您的意思是您想绘制所有500个变量,但在图例中仅显示选定的25个?
Srivatsan 2014年

Answers:


26

我经常为不想显示的图例插入一个空标签。我举了一个非常简单的例子,希望对您有所帮助。您需要将其调整为自己的数据,但是所需的元素应该存在。

import matplotlib.pyplot as plt 
import numpy as np

myY=np.random.randint(20, size=10)
myX=np.arange(0,len(myY))

selected=[5,10,15]

fig = plt.figure()
for X,Y in zip(myX,myY):
    if Y in selected:
        mylabel="label = %s"%(Y); mycolor='blue'
    else:
        mylabel=None; mycolor='red'
    plt.scatter(X,Y,50, color=mycolor, label=mylabel)
plt.legend()
plt.show()

这将创建以下图: 在此处输入图片说明


6
legend还需要艺术家列表和标签列表来精确控制传奇中的内容
tacaswell 2014年

这可能有效,但是有没有办法选择我想要的图例条目的字符串列表?我的情节是许多条目的堆积条形图。
2014年

当然。对于每个条目(由X,Y和名称标识),检查当前条目是否在要为其显示图例的所选标签列表中。除非您显示有关数据外观的更多信息,否则很难向您展示如何执行此操作。
Trond Kristiansen 2014年

尝试使用label =' nolegend '指示的解决方案
Philipp Schwarz

8
Philipp的意思是label='_nolegend_'(请注意下划线),请参阅jlansey的答案。
捷克学'18

200

这有效:

plt.plot(x, y, label='_nolegend_')

资源


24
什么?!?完美工作,但这是一个出乎意料的解决方案:)
Owen

22
年度骇客。
wordforthewise

23
嗯 可怜的混蛋想要他的标签说话真是不幸_nolegend_
詹森·S

7
开发人员是否选择了这个理由label=None
rovyko '19

10
开头的所有内容_均从图例中跳过。
StSav012

9

无论出于何种原因,这两个答案均不适用于我的情况。有效的方法,实际上在上面已指出:

legend还需要一个艺术家列表和一个标签列表来精确控制您的传说中的内容– tacaswell 2014年7月11日,下午4:46

import pandas as pd
import matplotlib.pyplot as plt
import pylab

pd.Series(range(10)).plot(color = 'grey')
x = list(range(10))
y = [i + 1 for i in x]  
scat1 = plt.scatter(x, y)

pylab.legend([scat1],['moved points'], loc = 'upper left')

plt.show()

代码的结果: 代码的结果:


干净的解决方案,可以适当扩展,谢谢您的分享
jlandercy '20

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.