Pyplot设置滴答频率和刻度标签

时间:2014-09-21 15:46:32

标签: python matplotlib

我试图用matplotlib制作一个情节,我想指定刻度线的位置和刻度线的文字。我可以使用yticks(np.arange(0,1.1,1/16.))gca().set_yticklabels(['1','2','3'])单独执行这两项操作。但是,出于某种原因,当我同时进行这两个操作时,标签不会显示在图表上。是否有一个原因?我怎么能绕过它呢?以下是我想要完成的工作示例。

x = [-1, -0.2, -0.15, 0.15, 0.2, 7.8, 7.85, 8.15, 8.2, 12]
y = [1, 1, 15/16., 15/16., 1, 1, 15/16., 15/16., 1, 1]

figure(1)
plot(x,y)
xlabel('Time (years)')
ylabel('Brightness')
yticks(np.arange(0,1.1,1/16.))
xticks(np.arange(0,13,2))
ylim(12/16.,16.5/16.)
xlim(-1,12)
gca().set_yticklabels(['12/16', '13/16', '14/16', '15/16', '16/16'])
show(block = False)

实际上我只是想用分数替换数值,但是当我运行它时,标签不会出现。似乎同时使用yticks()set_yticklabels是一个问题,因为如果我删除任一行,剩下的行就可以正常工作。

如果有人可以指出如何简单地强制标签成为一个分数,那也可以解决我的问题。

编辑: 我使用

找到了一个丑陋的解决方法
ylim(12/16., 16.5/16)
gca().yaxis.set_major_locator(FixedLocator([12/16., 13/16., 14/16., 15/16., 16/16.]))
gca().yaxis.set_major_formatter(FixedFormatter(['12/16', '13/16', '14/16', '15/16', '16/16']))

虽然这可能适用于这个具体的例子,但它没有很好地概括,并且指定每个刻度线的确切位置和标签是很麻烦的。如果有人找到另一种解决方案,我全都听见了。

1 个答案:

答案 0 :(得分:2)

1)您的arange应生成5个刻度,与您设置的标签相同 arange对此并不好。最好使用linspace

2)您可以使用相同的功能

设置刻度和标签
plot(x,y)
xlabel('Time (years)')
ylabel('Brightness')
yticks(np.linspace(12/16., 1, 5), ('12/16', '13/16', '14/16', '15/16', '16/16') )
xticks(np.arange(0,13,2))
ylim(12/16.,16.5/16.)
xlim(-1,12)

enter image description here

3)请注意,您应使用linspace(12/16., 1, 5)代替arange(0, 1.1, 1/16.))

,使用标签的位置调整轴的实际值
相关问题