我在使用双轴更改刻度标签属性时遇到问题。我希望文本很小,并且字体与默认字体不同。我找到了一种方法,直到我尝试使用twiny()。第二个轴不响应刻度格式化指令,如图所示。我错过了一些关键的东西,还是matplotlib中有错误?
Ubuntu 12.04,Python 2.7.3,matplotlib 1.1.1rc
#!/usr/bin/env python
# coding: utf-8
from matplotlib import pyplot as p
from numpy import sin, cos, arange
x = arange(0, 10, .01)
for plotnum in range(1,5):
p.subplot(2, 2, plotnum)
ax1 = p.gca()
p.plot(sin(x),x)
ax2 = p.twiny()
p.plot(cos(x)+plotnum,x, 'g--')
# Set size all tick labels
# Works for first axes (lower x-ticks) and can also change font
for tickset in [ax1.xaxis.get_major_ticks()]:
[(tick.label.set_fontsize(plotnum*4), tick.label.set_fontname('ubuntu mono')) for tick in tickset]
# Does not work for second axes (upper x-ticks)
for tickset in [ax2.xaxis.get_major_ticks()]:
[(tick.label.set_fontsize(plotnum*2), tick.label.set_fontname('ubuntu mono')) for tick in tickset]
# This works, but doesn't allow changing font
#ax2.tick_params(axis='both', which='major', labelsize=plotnum*2)
这是一张图片:
编辑: 修正了不正确的缩进行缩进行
编辑: 插入的图片(Thriveth)
答案 0 :(得分:5)
根据Tick类文档,Ticks可以有两个标签(label1
和label2
):
label
属性始终引用label1
。
您可以通过将ax2行更改为:
来修复脚本for tickset in [ax2.xaxis.get_major_ticks()]:
[(tick.label2.set_fontsize(plotnum*2), tick.label2.set_fontname('ubuntu mono'))
如果您需要get_majorticklabels
或label1
并简化您的脚本,label2
函数将会正常运行:
from matplotlib import pyplot as p
from numpy import sin, cos, arange
x = arange(0, 10, .01)
for plotnum in range(1,5):
p.subplot(2, 2, plotnum)
ax1 = p.gca()
p.plot(sin(x),x)
ax2 = p.twiny()
p.plot(cos(x)+plotnum,x, 'g--')
for label in ax1.xaxis.get_majorticklabels():
label.set_fontsize(plotnum * 4)
label.set_fontname('courier')
for label in ax2.xaxis.get_majorticklabels():
label.set_fontsize(plotnum * 4)
label.set_fontname('verdana')
注意,我把标签更改例程放在循环中!