sto generando matrici 2D su assi log-distanziati (per esempio, le coordinate x pixel vengono generati utilizzando logspace(log10(0.95), log10(2.08), n)
.assi non lineari per imshow in matplotlib
voglio visualizzare l'immagine utilizzando un semplice vecchio imshow, nella sua risoluzione e scalabilità nativa (non ho bisogno di to stretch it, i dati stessi sono già log ridimensionati), ma voglio aggiungere zecche, etichette, linee che si trovano nella posizione corretta sugli assi del registro.
Idealmente, potrei semplicemente usare la riga di comando axvline(1.5)
e la linea sarebbe nella posizione corretta (58% da sinistra), ma se l'unico modo è tradurre manualmente tra le coordinate di logscale e l'immagine c Oordinati, va bene anche questo.
Per gli assi lineari, utilizzare extents=
nella chiamata a imshow fa ciò che voglio, ma non vedo un modo per fare la stessa cosa con un asse di registro.
Esempio:
from matplotlib.colors import LogNorm
x = logspace(log10(10), log10(1000), 5)
imshow(vstack((x,x)), extent=[10, 1000, 0, 100], cmap='gray', norm=LogNorm(), interpolation='nearest')
axvline(100, color='red')
Questo esempio non funziona, perché misura = vale solo per scale lineari, in modo che quando si fa axvline a 100, non risulta al centro. Mi piacerebbe che l'asse x mostrasse 10, 100, 1000 e axvline(100)
per mettere una linea al centro nel punto 100, mentre i pixel rimangono equidistanti.
Puoi avere qualche codice o immagine funzionante di ciò che desideri ottenere. Un'altra domanda è se sei flessibile sull'uso di pcolor invece di imshow. – imsc
@imsc: aggiunto un esempio. Penso che pcolor stia bene. – endolith