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

Fun*_*zed 58 python matplotlib legend

我目前正在绘制一个包含大量分类数据的堆积条形图,并且只希望在图例中显示重要的物种(我希望显示约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)
Run Code Online (Sandbox Code Playgroud)

编辑:尝试添加此项仅显示一个图例条目,但只返回一个空图例:

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

jla*_*sey 159

这有效:

plt.plot(x, y, label='_nolegend_')
Run Code Online (Sandbox Code Playgroud)

资源

  • 什么?!?工作完美,但这是一个意想不到的解决方案:) (19认同)
  • 今年的黑客. (15认同)
  • 嗯.对于那些希望他的标签说'_nolegend_`的可怜混蛋来说,运气好. (13认同)
  • 以“ _”开头的所有内容均会从图例中跳过。 (6认同)
  • 开发人员是否有任何理由选择它而不是`label = None`? (5认同)
  • 挽救了我的生命……经过数小时的搜寻……然后才有了这个金矿 (2认同)

Tro*_*sen 15

我经常为我不想展示的传说插入一个空标签.我做了一个非常简单的例子,我希望能帮助你.您需要将此调整为您自己的数据,但您需要的元素应该在那里.

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()
Run Code Online (Sandbox Code Playgroud)

这会创建以下图: 在此输入图像描述

  • `legend`还会列出一系列艺术家和一系列标签,以精确控制传奇中的内容 (5认同)
  • 使用`label = None`对我没用. (4认同)
  • Philipp的意思是“ label ='_ nolegend _'”(注意下划线),请参阅[jlansey](/sf/answers/2499762611/)的答案。 (3认同)

And*_*nov 11

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

传奇还需要艺术家列表和标签列表,以精确控制进入您的传奇的内容 – 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()
Run Code Online (Sandbox Code Playgroud)

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


小智 7

您还可以使用空字符串变量:

    plt.plot(xData, yData, ..., label=str())
Run Code Online (Sandbox Code Playgroud)

通过传递一个空的 str() 对象,它不会写下任何内容。

Matplotlib API 参考

  • 或者节省 3 个字符并写 label="" (4认同)