Matplotlib - 如何设置xticks之间的距离(以mm / cm /点为单位)

时间:2012-08-22 17:46:29

标签: python matplotlib

我一直在互联网上看很长一段时间但却无法弄清楚如何制作它。我需要绘制几个数字,其xticks定义为numpy.arange(1,N),N对于每个数字都不同。我希望xticks之间的间距在所有数字(例如1厘米)上是相同的,也就是说,每个数字的宽度必须取决于numpy.arange(1,N)的大小。知道如何做到这一点吗?

2 个答案:

答案 0 :(得分:2)

我认为你可以通过仔细控制你的轴尺寸(作为图的一小部分),ax.set_xlimfig.set_size_inches (doc)来设置实际尺寸。这个数字。

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

答案 1 :(得分:0)

为了扩展@ tcaswell的答案,当我想微观管理轴的实际尺寸和间距的刻度时,我就是这样做的。

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

这导致数字为11.8厘米,x轴为10厘米,每个刻度之间有1厘米的空间:

enter image description here