2012-10-15 10 views
5

Mam problemy z modyfikowaniem właściwości etykiety znacznika na wykresie z dwoma osiami. Chcę, aby tekst był mały i miał inną czcionkę niż domyślna. Znalazłem sposób, który działał dobrze dopóki nie spróbowałem użyć twiny(). Druga osie nie reagują na instrukcje formatowania, jak widać na rysunku. Czy brakuje mi czegoś istotnego, czy jest jakiś błąd w Matplotlib?Dostosowywanie rozmiaru etykiety znacznika na dwóch osiach

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) 

Oto zdjęcie:

Here the image is

Edit: Poprawiono nieprawidłowe wcięcia od kleszczy zmieniających linie

Edycja: wstawiony obraz (Thriveth)

Odpowiedz

5

kleszczy może mieć dwie etykiety (label1 i label2) według dokumentacji klasy Tick:

  • 1 odnosi się do dolnej części wykresu na xticks i lewa na yticks
  • 2 odnosi się do górnej części wykresu na xticks i prawej stronie dla yticks

label atrybut zawsze odnosi się do label1.

można naprawić skrypt zmieniając linie Ax2 do:

for tickset in [ax2.xaxis.get_major_ticks()]: 
    [(tick.label2.set_fontsize(plotnum*2), tick.label2.set_fontname('ubuntu mono')) 

W get_majorticklabels funkcje będą działać, jeśli będziesz potrzebować label1 lub label2 i upraszcza skryptu:

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

Note , Umieszczam procedury zmiany etykiety w pętli! plotted tick labels

Powiązane problemy