Ho un set di dati con letture del sensore "continue" effettivamente, con intervalli occasionali.Inserimento di un'interruzione/interruzione in un grafico a linee
Tuttavia, esistono diversi periodi in cui non sono stati registrati dati. Queste lacune sono significativamente più lunghe del periodo di campionamento.
Per impostazione predefinita, pyplot collega ogni punto di dati al successivo (se ho uno stile di linea impostato), tuttavia ritengo che questo sia leggermente fuorviante quando collega i due punti di dati su entrambi i lati di un intervallo lungo.
Preferirei semplicemente non avere linea lì; cioè, vorrei che la linea si fermasse e ricominciare dopo il divario.
Ho provato ad aggiungere un elemento in queste sezioni di gap con il valore y None
, ma sembra di inviare la linea indietro a una parte precedente della trama (sebbene stranamente queste linee non appaiano a tutti i livelli di zoom) .
L'altra opzione che ho pensato è di tracciare semplicemente ogni pezzo con una chiamata separata a plot
, ma questo sarebbe un po 'brutto e ingombrante.
Esiste un modo più elegante per raggiungere questo obiettivo?
Modifica: di seguito è riportato un esempio di funzionamento minimo che dimostra il comportamento. La prima trama è la linea di congiunzione che sto tentando di evitare. Il secondo grafico mostra che l'aggiunta di un valore None
sembra funzionare, tuttavia se si effettua una panoramica della trama, si ottiene ciò che è mostrato nella terza figura, una linea che salta a una parte precedente della trama.
import numpy as np
import matplotlib.pyplot as plt
t1 = np.arange(0, 8, 0.05)
t2 = np.arange(10, 14, 0.05)
t = np.concatenate([t1, t2])
c = np.cos(t)
fig = plt.figure()
ax = fig.gca()
ax.plot(t, c)
ax.set_title('Undesirable joining line')
t1 = np.arange(0, 8, 0.05)
t2 = np.arange(10, 14, 0.05)
c1 = np.cos(t1)
c2 = np.cos(t2)
t = np.concatenate([t1, t1[-1:], t2])
c = np.concatenate([c1, [None,], c2])
fig = plt.figure()
ax = fig.gca()
ax.plot(t, c)
ax.set_title('Ok if you don\'t pan the plot')
fig = plt.figure()
ax = fig.gca()
ax.plot(t, c)
ax.axis([-1, 12, -0.5, 1.25])
ax.set_title('Strange jumping line')
plt.show()
Sarebbe possibile fare un esempio riproducibile, in particolare mostrando il codice matplotlib che stai usando attualmente per tracciare? –
Buona idea. Aggiunto l'esempio. – Alex
Cosa succede se si chiama plot() due volte? Vale a dire. ax.plot (t1, c1) e ax.plot (t2, c2). Devi impostare il colore manualmente: ax.plot (t1, c1, c = "b") – Robbert