7

2 つの軸を持つプロットで目盛りラベルのプロパティを変更するのに問題があります。テキストを小さくして、デフォルトとは異なるフォントにしたい。twiny() を使用してみるまで、問題なく機能する方法を見つけました。図でわかるように、2 番目の軸は目盛りの書式設定命令に応答しません。何か重要なものが欠けていますか、それとも 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)

4

1 に答える 1

7

Tick クラスのドキュメントによると、Tick には 2 つのラベル (label1と) を付けることができます。label2

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

ラベル変更ルーチンをループに入れたことに注意してください。 プロットされた目盛ラベル

于 2012-10-15T09:14:56.140 に答える