Ho un file contenente eventi registrati. Ogni voce ha un tempo e una latenza. Sono interessato a tracciare la funzione di distribuzione cumulativa delle latenze. Sono più interessato alle latenze di coda, quindi voglio che la trama abbia un asse y logaritmico. Sono interessato alle latenze ai seguenti percentili: 90 °, 99 °, 99,9 °, 99,99 ° e 99,999 °. Ecco il mio codice finora che genera una trama regolare CDF:Trama logaritmica di una funzione di distribuzione cumulativa in matplotlib
# retrieve event times and latencies from the file
times, latencies = read_in_data_from_file('myfile.csv')
# compute the CDF
cdfx = numpy.sort(latencies)
cdfy = numpy.linspace(1/len(latencies), 1.0, len(latencies))
# plot the CDF
plt.plot(cdfx, cdfy)
plt.show()
So quello che voglio la trama a guardare come, ma ho lottato per ottenerlo. Voglio farlo sembrare come questo (non ho generare questa trama):
Effettuare la logaritmica asse x è semplice. L'asse y è quello che mi dà problemi. L'uso di set_yscale('log')
non funziona perché vuole usare le potenze di 10. Voglio davvero che l'asse y abbia lo stesso ticklabels di questa trama.
Come posso ottenere i miei dati in una trama logaritmica come questa?
EDIT:
Se ho impostato il yscale a 'log', e ylim a [0.1, 1], ottengo il seguente grafico:
Il problema è che un tipico il grafico della scala del log su un set di dati compreso tra 0 e 1 si focalizzerà su valori prossimi allo zero. Invece, voglio concentrarmi sui valori vicini a 1.
Che tipo di problemi stai avendo con 'set_yscale ('symlog')'? – mziccard
Anche l'impostazione delle posizioni delle etichette è una storia completamente diversa. Suppongo che tu possa fare la scala logaritmica sull'asse y (funziona, se hai un numero 0 o -ve i dati sono sbagliati) e quindi regola le etichette. –
Cosa intendi quando dici che il registro asse y * "non funziona" *? Potresti mostrarci? Non è matematicamente possibile rappresentare 0 su una scala di log, quindi il primo valore dovrà essere mascherato o ritagliato su un numero positivo molto piccolo. Puoi controllare questo comportamento passando "maschera" o "clip" come parametro "nonposy =" a "ax.set_yscale()". –