Funsaizado
Actualmente estoy trazando un gráfico de barras apiladas de una gran cantidad de datos taxonómicos, y solo deseo mostrar especies significativas en la leyenda (de ~ 500, deseo mostrar ~ 25). ¿Hay una manera simple de hacer esto? A continuación se muestra el código que tengo:
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)
Editar: intenté agregar esto para mostrar solo una entrada de leyenda, sin embargo, solo devuelve una leyenda vacía:
h, l = ax1.get_legend_handles_labels()
legend(l[4],h[4],ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.)
jlansey
-
Mmm. Mala suerte para el pobre bastardo que quiere que su etiqueta diga
_nolegend_
.– Jason S.
6 de enero de 2019 a las 16:26
-
¿Hay alguna razón por la que los desarrolladores eligieron esto sobre
label=None
?– Rovyko
16 abr 2019 a las 22:44
-
Todo lo que comienza con
_
se salta de la leyenda.– StSav012
15 mayo 2019 a las 17:21
-
¿Cómo puedo etiquetar mi parcela como
_nolegend_
? :PAG– Jack negro 21
19 de junio de 2020 a las 10:46
-
como se muestra, agregando el parámetro:
label='_nolegend_'
– jlansey
24 de junio de 2020 a las 13:04
A menudo inserto una etiqueta vacía para las leyendas que no quiero mostrar. Hice un ejemplo extremadamente simple que espero te ayude. Deberá ajustar esto a sus propios datos, pero los elementos que necesita deben estar allí.
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()
Esto crea la siguiente trama:
-
legend
también toma una lista de artistas y una lista de etiquetas para controlar con precisión lo que entra en su leyenda– tacoswell
11 de julio de 2014 a las 4:46
-
Esto podría funcionar, pero ¿hay alguna forma de que la selección sea una lista de cadenas de las entradas de la leyenda que quiero? mi gráfico es un gráfico de barras apiladas de muchas entradas.
– Funsaizado
11 de julio de 2014 a las 14:10
-
Seguro. Para cada una de sus entradas (identificadas por X, Y y nombre), verifique si su entrada actual está en una lista de etiquetas seleccionadas para las que desea mostrar la leyenda. Es difícil mostrarle cómo hacer esto a menos que muestre más información sobre cómo se ven sus datos.
–Trond Kristiansen
11/07/2014 a las 15:50
-
Pruebe la solución indicada con label=’sin leyenda‘
– Philipp Schwarz
7 oct 2016 a las 23:13
-
Philipp significa
label='_nolegend_'
(tenga en cuenta los guiones bajos), vea la respuesta de jlansey.– Checanología
23 de agosto de 2018 a las 19:23
andréi selivanov
Por alguna razón, ambas respuestas no funcionaron para mi situación. Lo que funcionó, y en realidad se indicó anteriormente:
legend también toma una lista de artistas y una lista de sellos para controlar con precisión lo que incluye tu leyenda – tacaswell 11 jul.
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()
El resultado del código:
-
Solución limpia que se escala correctamente, gracias por compartir
– jlandercy
19 de abril de 2020 a las 5:09
También puede usar una variable de cadena vacía:
plt.plot(xData, yData, ..., label=str())
Al pasar un objeto str() vacío, no escribe nada.
Sé que esta publicación se publicará hace una década, pero estaba buscando una manera de hacer algo similar y esta publicación estaba en la parte superior de los resultados de Google. Estaba trabajando con el seguimiento de datos del uso del montón de un proceso y los procesos que generaba. La mayoría de los procesos consumían una cantidad insignificante de memoria y mostrar la leyenda completa habría sido difícil de manejar. Terminé con la siguiente solución:
label_names = heap_df.columns.values.tolist()
max_per_proc = heap_df.max()
max_heap_overall = max(max_per_proc)
fig, ax = plt.subplots()
plt.stackplot(heap_df.index, heap_df.values.T, labels=label_names)
lines, labels = ax.get_legend_handles_labels()
lbl_idx = []
for idx in range(len(labels)):
if max_per_proc[labels[idx]] / max_heap_overall > 0.01:
lbl_idx.append(idx)
ax.legend([lines[i] for i in lbl_idx], [labels[i] for i in lbl_idx])
plt.show()