Je suis en train de tracer un graphique à barres empilées d'une grande quantité de données taxonomiques et ne souhaite que montrer des espèces significatives dans la légende (sur ~ 500, je souhaite montrer ~ 25). Y a-t-il un moyen simple de faire cela? Ci-dessous le code que j'ai:
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)
Edit: essayé d'ajouter ceci pour afficher une seule entrée de légende, mais ne renvoie qu'une légende vide:
h, l = ax1.get_legend_handles_labels()
legend(l[4],h[4],ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.)
J'insère souvent une étiquette vide pour les légendes que je ne veux pas montrer. J'ai fait un exemple extrêmement simple qui, je l'espère, vous aidera. Vous devrez modifier cela en fonction de vos propres données, mais les éléments dont vous avez besoin devraient être là.
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()
Cela crée l'intrigue suivante:
Pour une raison quelconque, les deux réponses ne fonctionnaient pas dans le cas de la mine. Ce qui a fonctionné et qui a été indiqué ci-dessus:
la légende prend également une liste d'artistes et une liste de labels pour contrôler précisément ce qui se trouve dans votre légende
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()
Le résultat du code:
Vous pouvez également utiliser une variable de chaîne vide:
plt.plot(xData, yData, ..., label=str())
En passant un objet vide str (), il n’écrit rien.