2012-08-22 22 views
6

He estado buscando en Internet durante mucho tiempo, pero no pude encontrar la manera de hacerlo. Necesito dibujar varias figuras cuyos xticks se definen como numpy.arange (1, N), siendo N diferente para cada figura. Quiero que el espacio entre los xticks sea idéntico en todas las figuras (por ejemplo, 1 cm), es decir, el ancho de cada figura debe depender del tamaño de numpy.arange (1, N). ¿Alguna idea de cómo hacer eso?Matplotlib - Cómo establecer la distancia (en mm/cm/puntos ...) entre los xticks

Respuesta

2

Creo que se puede hacer esto con una combinación de un control cuidadoso de su tamaño ejes (como una fracción de la figura), y ax.set_xlimfig.set_size_inches(doc) para ajustar el tamaño real de la figura.

ex

fig = plt.figure() 
ax = fig.add_axes([0,0,1,1]) 
ax.set_xlim([0,N]) 
fig.set_size_inches([N/2.54,h]) 
0

de ampliar la respuesta de @ tcaswell, aquí es cómo lo hago cuando quiero micro-gestión de la dimensión real de mi eje y de la distancia entre las garrapatas.

import numpy as np 
import matplotlib.pyplot as plt 

plt.close('all') 

#------------------------------------------------------ define xticks setup ---- 

xticks_pos = np.arange(11) # xticks relative position in xaxis 
N = np.max(xticks_pos) - np.min(xticks_pos) # numbers of space between ticks 
dx = 1/2.54 # fixed space between xticks in inches 
xaxis_length = N * dx 

#------------------------------------------------------------ create figure ---- 

#---- define margins size in inches ---- 

left_margin = 0.5 
right_margin = 0.2 
bottom_margin = 0.5 
top_margin = 0.25 

#--- calculate total figure size in inches ---- 

fwidth = left_margin + right_margin + xaxis_length 
fheight = 3 

fig = plt.figure(figsize=(fwidth, fheight)) 
fig.patch.set_facecolor('white') 

#---------------------------------------------------------------- create axe---- 

#---- axes relative size ---- 

axw = 1 - (left_margin + right_margin)/fwidth 
axh = 1 - (bottom_margin + top_margin)/fheight 

x0 = left_margin/fwidth 
y0 = bottom_margin/fheight 

ax0 = fig.add_axes([x0, y0, axw, axh], frameon=True) 

#---------------------------------------------------------------- set xticks---- 

ax0.set_xticks(xticks_pos) 

plt.show(block=False) 
fig.savefig('axis_ticks_cm.png') 

Esto resulta en una figura de 11,8 cm con un eje x de 10 cm con 1 cm de espacio entre cada garrapatas:

enter image description here

Cuestiones relacionadas