使用matplotlib打印时,更改记号标签的位置(移动)



我正在使用matplotlib进行绘图。代码如下(zvals有值)

cmap = mpl.colors.ListedColormap(['darkblue', 'blue', 'lightblue','lightgreen','yellow','gold','orange','darkorange','orangered','red'])
bounds=[0, 10,20,30,40,50,60,70,80,100,200,1000]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
img2 = plt.imshow(zvals,interpolation='nearest',
cmap = cmap,
norm=norm,
origin='lower')

xlocations = na.array(range(30)) + 0.5
xticks(xlocations, [str(x+1) for x in arange(30)], rotation=0, size=5)
gca().xaxis.set_ticks_position('none')
gca().yaxis.set_ticks_position('none')  
grid(True)

这会产生以下图片:http://imageshack.us/a/img145/7325/histogrammoverview.png

我想把xticks(1,2,3,..)的标签向左移动一点,这样它们就在相应的颜色框下面。相应地,我也想将yticks(user1和user2)的标签向下移动一点,以便它们被正确显示。如何做到这一点?

编辑:事实上,我可以改一下xlocations=na.array(范围(30))+0.5到xlocations=na.array(范围(30))

那么得到的图片是这样的:http://imageshack.us/a/img338/7325/histogrammoverview.png

请注意,网格正在"穿过"彩色框,这不是我想要的。我想把网格放在彩色方框的边缘,如上图所示。在这个版本中,尽管标签(1,2,3,…)正确地放置在盒子下面。我怎么能正确地放置标签(在彩色框下面)和一个围绕彩色框的网格,而不是穿过彩色框的中间。

解决方案

这个解决方案有效(正如答案所建议的):

periods = 30
xlocations = na.array(range(periods))
xminorlocations = na.array(range(periods))+0.5
xticks(xlocations, [str(x+1) for x in arange(periods)], rotation=0, size=5)
plt.set_xticks(xminorlocations, minor=True)
grid(True, which='minor', linestyle='-')

结果:hxxp://imageshack.us/a/img9/7325/histogrammoverview.png

我认为你可以通过来管理它

  • 将主要刻度位置设置在每个正方形的中间
  • 将次要刻度设置为每个正方形的边缘
  • 将网格设置为仅在次要刻度中显示

使用只能在次要刻度中显示网格

plt.grid(True, which='minor')

我也会将线条样式设置为'-'

最新更新