Matplotlib kene etiketlerini yazı tipi boyutunu küçült


299

Bir matplotlib şeklinde, kene etiketleri için yazı tipi boyutunu nasıl ax1.set_xticklabels()daha küçük kullanarak nasıl yapabilirim ?

Ayrıca, yataydan dikeye nasıl döndürülebilir?


Bu soruyu sorduğunuz için teşekkürler, şu anda bu sorunu çözmeye çalışıyorum. Burada güçlü bir şekilde düşünülmüyorum, ancak seçmenlerin en iyi cevabın kabul edilen cevap olmadığını düşündüğü anlaşılıyor. Ne düşünüyorsun?
Aaron Hall

düzgün bir şekilde matplotlib'deki yazı tipini değiştirmenin en az 5 farklı yolu olduğunu okudum mu? : D
famargar

Yanıtlar:


127

Daha yeni MPL sürümlerinin bu görev için bir kısayolu olduğunu lütfen unutmayın. Bu sorunun diğer cevabında bir örnek gösterilmektedir: https://stackoverflow.com/a/11386056/42346

Aşağıdaki kod, açıklama amaçlıdır ve mutlaka optimize edilmeyebilir.

import matplotlib.pyplot as plt
import numpy as np

def xticklabels_example():
    fig = plt.figure() 

    x = np.arange(20)
    y1 = np.cos(x)
    y2 = (x**2)
    y3 = (x**3)
    yn = (y1,y2,y3)
    COLORS = ('b','g','k')

    for i,y in enumerate(yn):
        ax = fig.add_subplot(len(yn),1,i+1)

        ax.plot(x, y, ls='solid', color=COLORS[i]) 

        if i != len(yn) - 1:
            # all but last 
            ax.set_xticklabels( () )
        else:
            for tick in ax.xaxis.get_major_ticks():
                tick.label.set_fontsize(14) 
                # specify integer or one of preset strings, e.g.
                #tick.label.set_fontsize('x-small') 
                tick.label.set_rotation('vertical')

    fig.suptitle('Matplotlib xticklabels Example')
    plt.show()

if __name__ == '__main__':
    xticklabels_example()

resim açıklamasını buraya girin


84
Bir kenara olduğu gibi: Kene etiketi nesneleri arasında döngü yapmak yerine kullanabilirsiniz plt.setp. (Ayrıca, bir göz atın ax.tick_params) Örneğin, sadece yapabilirsiniz plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14). Ayrıca, eksen nesnelerinin ax.is_last_row()örneğiniz gibi durumlarda kullanışlı olabilecek bir yöntemi vardır. Bunun yerine if i != len..., yapabilirsiniz if not ax.is_last_row(). (Neden bir yöntem, hiçbir fikrim yok ... Matplotlib görünüşe göre özellikleri nefret ediyor!)
Joe Kington

@Joe: Bu benim ilk kez duyduğum şey is_last_row(), teşekkürler! plt.setpGeçmişte kullandım ve kene etiketlerini özelleştirmenin daha kanonik bir yolunu temsil ettiğinden emin değildi. Bu şüpheyi ortadan kaldırdınız, teşekkürler. Daha geniş anlamda: yanıtlarınız, özellikle de matplotlibetikette, beni sık sık şaşırtıyor. Harika işlere devam edin.
mechanical_meat

1
Teşekkürler!! Nazik sözleri takdir ediyorum, özellikle sizden! Kanonik çok görecelidir, bu durumda. plt.setp"matlab-ism" dir ve açık bir döngü muhtemelen çok daha pitoniktir. Bir matlab dönüşümü olmak, kendimi, setpdoğal hissettiriyor, ancak her biri kendi başına. İkisi de oldukça okunaklı, imo
Joe Kington

50
Yeni sürümlerde labelsize parametresini kullanmanız gerektiğini buldum : örn.ax.tick_params(axis='x', labelsize=8)
Vladtn

Olmalı get_ticklabelsdeğilget_major_ticks
jez

507

Aslında daha basit bir yol var. Az önce buldum:

import matplotlib.pyplot as plt
# We prepare the plot  
fig, ax = plt.subplots()

# We change the fontsize of minor ticks label 
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)

Bu sadece labelsorunuzun bir kısmının boyutuna cevap verir .


2
axis = 'x'axis = 'y'
Eksenden

221

Hem yazı tipi boyutunu hem de döndürmeyi aynı anda belirtmek için şunu deneyin:

plt.xticks(fontsize=14, rotation=90)

4
Bunun MATLAB benzeri pyplot arayüzü ile çalışırken kullanıldığını unutmayın. Nesne yönelimli arayüz durumunda, eksen nesnesinin tick_params () yöntemi veya eksen nesnesinin set_tick_params () yöntemi kullanılmalıdır (diğer yanıtlara bakın).
wombatonfire

54

Alternatif olarak, şunları yapabilirsiniz:

import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size 

36
plt.tick_params(axis='both', which='minor', labelsize=12)

Bu, yazı tipi boyutunu yeni etiketler ayarlamadan değiştirmek istiyorsanız çalışan tek yanıttır.
David Stansby

@DavidStansby Bunun doğru olduğuna inanmıyorum. Bu kesin sorunu (yukarıda bahsedildi) vardı ve bu çözümden farklı bir alternatif yöntem kullanabildi. kullanmaax.xaxis.set_tick_params(labelsize=20)
Kyle Swanson

1
en basit cevap, balta nesnesine başvuru gerektirmez
jeremy_rutman

27

Başka bir alternatif

Yan yana iki parselim var ve kene etiketlerini ayrı ayrı ayarlamak istiyorum.

Yukarıdaki çözümler yakındı ancak benim için çalışmadılar. Çözümümü bu matplotlib sayfasından buldum .

ax.xaxis.set_tick_params(labelsize=20)

Bu hile yaptı ve doğrudan noktaya geldi. Benim kullanım durumum için, sağdaki arsa ayarlanması gerekiyordu. Yeni onay etiketleri oluşturduğumdan beri soldaki çizim için, yazı tipini etiketleri ayarlamakla aynı işlemde ayarlayabildim .

yani

ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)

bu yüzden doğru arsa için kullandım,

ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)

Küçük bir incelik ... Biliyorum ... ama umarım bu birine yardımcı olur :)

Büyüklük etiketinin yazı tipi boyutunu nasıl ayarlayacağını bilen bonus puanları.

resim açıklamasını buraya girin


22

Matplotlib'in güncel sürümlerinde bunu yapabilirsiniz axis.set_xticklabels(labels, fontsize='small').


1
Bu da sizi belirtmeye zorlar labels. Yalnızca yazı tipi boyutunu değiştirebilirsek daha iyi olur.
Guimoute

16

Yazı tipi boyutu gibi etiket görüntüleme parametrelerini aşağıdaki gibi bir satırla da değiştirebilirsiniz:

zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]

1
Yan etkileri olan liste kavrayışlarını kullanmanın en iyi uygulama olmadığını düşünüyorum. Bunun yerine döngü için bir standart kullanmanızı öneririm.
jjmontes

14

Daha küçük yazı tipi için

ax1.set_xticklabels(xticklabels, fontsize=7)

ve çalışıyor!


xticklabels'i nasıl tanımlıyorsunuz?
mLstudent33

10

Aşağıdakiler benim için çalıştı:

ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)

Yukarıda avantajı sağlamak gerekmez edilir arrayait labelsherhangi verilerle ve eserleri axes.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.