我试图用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']))
虽然这可能适用于这个具体的例子,但它没有很好地概括,并且指定每个刻度线的确切位置和标签是很麻烦的。如果有人找到另一种解决方案,我全都听见了。
答案 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)
3)请注意,您应使用linspace(12/16., 1, 5)
代替arange(0, 1.1, 1/16.))