2012-01-29 4 views
9

Ho una barra orizzontale matplotlib tracciata come segue:personalizzazione solo lato dei segni di graduazione in matplotlib utilizzando spine

import matplotlib.pyplot as plt 
from numpy import * 
from scipy import * 
bars = arange(5) + 0.1 
vals = rand(5) 
print bars, vals 
plt.figure(figsize=(5,5), dpi=100) 
spines = ["bottom"] 
ax = plt.subplot(1, 1, 1) 
for loc, spine in ax.spines.iteritems(): 
    if loc not in spines: 
    spine.set_color('none') 
# don't draw ytick marks 
#ax.yaxis.set_tick_params(size=0) 
ax.xaxis.set_ticks_position('bottom') 
plt.barh(bars, vals, align="center") 
plt.savefig("test.png") 

Ciò produce questa immagine: enter image description here

ho voluto mostrare solo all'asse X, che ha lavorato usando le spine, ma ora traccia questi segni di spunta per gli yax di destra. Come posso rimuovere questi? id come mantenere i segni yicke sul lato sinistro della trama e farli rivolti verso l'esterno (direzione opposta alle barre). So che posso togliere le ytickmarks del tutto decommentando la linea:

#ax.yaxis.set_tick_params(size=0) 

ma voglio mantenere i segni Ytick solo sul lato sinistro. grazie.

EDIT: Ho ottenuto una soluzione dopo alcune prove ed errori anche se sono sicuro che la mia soluzione non è probabilmente il modo migliore per farlo, quindi per favore fatemi sapere cosa ne pensate ancora. ho trovato che posso fare:

ax.spines["left"].axis.axes.tick_params(direction="outward") 

per impostare la direzione del segno di spunta. per sbarazzarsi del diritto asse y zecche, io uso:

ax.yaxis.set_ticks_position("left") 

risposta

15

si può semplicemente utilizzare:

ax.tick_params(axis='y', direction='out') 

questo orientare le zecche come si desidera. E:

ax.yaxis.tick_left() 

questo non tracciare il diritto zecche

11

È possibile utilizzare:

ax.tick_params(top="off") 
ax.tick_params(bottom="off") 
ax.tick_params(right="off") 
ax.tick_params(left="off")