2012-10-15 52 views
5

我在更改双轴坐标图上的刻度标签属性时遇到问题。我希望文字很小,字体不同于默认字体。我发现一种工作正常的方式,直到我尝试使用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) 

这里是一个图像:

Here the image is

编辑:固定不正确蜱改变缩进行

编辑:插入图像(Thriveth)

回答

5

蜱可以具有两个标签(label1label2),根据蜱类的文档:

  • 1指的是曲线图的底部,用于xticks和对于yticks
  • 2左指情节的xticks的顶部和yticks

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功能会有效,如果你将需要label1label2并简化你的脚本:

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

注,我把循环中的标签更改例程! plotted tick labels