2012-08-22 11 views
6

Długo szukałem w Internecie, ale nie mogłem wymyślić, jak to zrobić. Muszę narysować kilka figur, których xticks są zdefiniowane jako numpy.arange (1, N), N jest różne dla każdej figury. Chcę, aby odstępy między krosami były identyczne na wszystkich figurach (na przykład 1 cm), to znaczy szerokość każdej figury musi być zależna od wielkości numpy.arange (1, N). Jakiś pomysł, jak to zrobić?Matplotlib - Jak ustawić odległość (w mm/cm/punktach ...) między Xticks

Odpowiedz

2

myślę, że można to zrobić za pomocą kombinacji starannej kontroli rozmiaru osi (jako ułamek rysunek) ax.set_xlim i fig.set_size_inches(doc) aby ustawić rzeczywisty rozmiar rysunku.

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

Aby rozwinąć na odpowiedź @ tcaswell jest, oto jak to zrobić, gdy chcę mikro-zarządzania realny wymiar mojego osi i kleszcze wzajemnych odległości.

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') 

Powoduje postać 11,8 cm z Xaxis 10 cm z 1cm przestrzeni pomiędzy każdymi kleszczy:

enter image description here

Powiązane problemy