A veces, me llegan ficheros de datos con datos cada hora o cada dĂa y los quiero representar en un plot. Para ello, podrĂa acumular los ficheros en uno solo y luego pintarlo pero como lo debo hacer en 'tiempo casi-real' se puede meter todo en un bucle while
que espera los ficheros cada hora/dĂa/lo que sea y va pintando cada variable por tramos. Por ejemplo, una aproximaciĂłn podrĂa ser la siguiente:
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('bmh')
%matplotlib inline
plt.figure(figsize = (12, 6))
for i in range(10):
x = np.arange(i * 10, i * 10 + 10)
y_var1 = np.random.randint(1, 5, 10)
y_var2 = np.random.randint(5, 8, 10)
plt.plot(x, y_var1, color = 'k', label = 'variable1')
plt.plot(x, y_var2, color = 'g', label = 'variable2')
plt.legend()
plt.ylim(0, 9)
Como véis, en la gråfica anterior hay varios problemas pero como esta es una MicroEntrada solo nos vamos a centrar en el problema de las etiquetas repetidas en la leyenda.
Mi problema es que el bucle es o podrĂa ser 'infinito' y tengo que inicializar las etiquetas de alguna forma. Si miro en esta respuesta encontrada en Stackoverflow dice que en la documentaciĂłn se indica que "If label attribute is empty string or starts with â_â, those artists will be ignored." pero si busco aquĂ o en el enlace que indican en la respuesta en Stackoverflow no veo esa funcionalidad indicada en ningĂșn sitio. Eso es porque aparecĂa en la versiĂłn 1.3.1 pero luego desapareciĂł... Sin embargo podemos seguir usando esa funcionalidad aunque actualmente no estĂ© documentada:
plt.figure(figsize = (12, 6))
for i in range(10):
x = np.arange(i * 10, i * 10 + 10)
y_var1 = np.random.randint(1, 5, 10)
y_var2 = np.random.randint(5, 8, 10)
plt.plot(x, y_var1, color = 'k', label = 'variable1' if i == 0 else "_esto_no_se_pintarĂĄ")
plt.plot(x, y_var2, color = 'g', label = 'variable2' if i == 0 else "_esto_tampoco")
plt.legend()
plt.ylim(0, 9)
Espero que a alguien le resulte Ăștil.