2010-09-15 2 views
8

Ho creato un grafico immagine con ax = imshow(). ax è un oggetto AxesImage, ma non riesco a trovare la funzione o l'attributo che ho bisogno di accedere per personalizzare le etichette di graduazione. Il ordinary pyplots sembra avere i metodi set_ticks e set_ticklabels, ma questi non sembrano essere disponibili per la classe AxesImage. Qualche idea? Grazie ~personalizza i segni di graduazione per AxesImage?

risposta

8

Per quello che vale, il gioco è un po 'equivoco quali imshow() rendimenti, e come assi matplotlib sono strutturati in generale ...

Un oggetto AxesImage è responsabile per l'immagine visualizzata (ad esempio, mappe di colori, i dati, ecc.), ma non l'asse in cui risiede l'immagine. Non ha alcun controllo su cose come le zecche e le etichette di graduazione.

Quello che si desidera utilizzare è l'istanza dell'asse corrente.

È possibile accedere a questo con gca(), se si utilizza l'interfaccia pylab o matplotlib.pyplot.gca se si accede a cose tramite Pyplot. Tuttavia, se si utilizza uno dei due, è disponibile una funzione xticks() per ottenere/impostare le etichette e le posizioni xtick.

Per esempio (utilizzando pylab):

import pylab 
pylab.figure() 
pylab.plot(range(10)) 
pylab.xticks([2,3,4], ['a','b','c']) 
pylab.show() 

Utilizzando un approccio più orientato agli oggetti (su una nota a caso, getter e setter di matplotlib ottenere fastidioso in fretta ...):

import matplotlib.pyplot as plt 
import numpy as np 
fig = plt.figure() 
ax = fig.add_subplot(1,1,1) # Or we could call plt.gca() later... 
im = ax.imshow(np.random.random((10,10))) 
ax.set_xticklabels(['a','b','c','d']) # Or we could use plt.xticks(...) 

Spero che chiarisca un po 'le cose!

+0

Sì! Grazie - mi aspettavo che fosse in qualche modo simile a matlab dove image() restituisce l'handle degli assi. Anche il nome dell'oggetto è un po 'fuorviante ... L'ho notato anche riguardo al getter/setter! In matlab spesso passo gli argomenti ai setter degli assi usando la notazione 'cellarray {:}' che sarebbe come la sintassi '* args' e' ** kwargs' di python, ma in questo caso non è così semplice (sebbene io sono sicuro che ci siano dei modi per aggirarlo). – hatmatrix