调整双轴上的刻度标签尺寸

Åsm*_*und 5 axes matplotlib

我在使用双轴更改刻度标签属性时遇到问题.我希望文本很小,并且字体与默认字体不同.我找到了一种方法,直到我尝试使用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)
Run Code Online (Sandbox Code Playgroud)

这是一张图片:

这是图像

编辑:修复了不正确缩进的刻度线

编辑:插入的图像(Thriveth)

arj*_*nve 5

根据Tick类文档,Ticks可以有两个标签(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'))
Run Code Online (Sandbox Code Playgroud)

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')
Run Code Online (Sandbox Code Playgroud)

注意,我把标签更改例程放在循环中! 绘制刻度标签