2011-06-17 33 views
169

Trong hình matplotlib, làm thế nào tôi có thể làm cho cỡ chữ cho các nhãn đánh dấu bằng cách sử dụng ax1.set_xticklabels() nhỏ hơn?Matplotlib giúp đánh dấu các nhãn cỡ phông chữ nhỏ hơn

Hơn nữa, làm cách nào để xoay từ ngang sang dọc?

+0

Cảm ơn khi đặt câu hỏi này, tôi đang cố giải quyết vấn đề này ngay bây giờ. Tôi không có ý kiến ​​mạnh mẽ ở đây, nhưng có vẻ như cử tri nghĩ câu trả lời tốt nhất không phải là câu trả lời được chấp nhận. Bạn nghĩ sao? –

+0

tôi đã đọc đúng cách có ít nhất 5 cách khác nhau để thay đổi phông chữ trong matplotlib? : D – famargar

Trả lời

71

Xin lưu ý rằng các phiên bản MPL mới hơn có lối tắt cho tác vụ này. Một ví dụ được hiển thị trong câu trả lời khác cho câu hỏi này: https://stackoverflow.com/a/11386056/42346

Mã bên dưới là nhằm mục đích minh họa và có thể không nhất thiết phải được tối ưu hóa.

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

enter image description here

+53

Cũng giống như một sang một bên: Thay vì lặp qua các đối tượng nhãn tick, bạn có thể sử dụng 'plt.setp'. (Ngoài ra, có một cái nhìn tại 'ax.tick_params') Ví dụ, bạn chỉ có thể làm' plt.setp (ax.get_xticklabels(), rotation = 'vertical', fontsize = 14) '. Ngoài ra, các đối tượng trục có phương thức 'ax.is_last_row()' có thể có ích trong các trường hợp như ví dụ của bạn. Thay vì 'if i! = Len ...', bạn có thể làm 'if not ax.is_last_row()'. (Tại sao nó là một phương pháp, tôi không có đầu mối ... Matplotlib ghét tài sản, rõ ràng!) –

+0

@Joe: đây là lần đầu tiên tôi nghe về 'is_last_row()', cảm ơn bạn! Tôi đã sử dụng 'plt.setp' trong quá khứ, và không nhất thiết phải chắc chắn nó đại diện cho một cách tùy chỉnh kinh điển hơn các nhãn tick. Bạn đã loại bỏ sự nghi ngờ đó, cảm ơn. Rộng hơn: các câu trả lời của bạn, đặc biệt là trong thẻ 'matplotlib', thường khiến tôi kinh ngạc. Kịp các công việc tuyệt vời. – bernie

+0

Cảm ơn !! Tôi đánh giá cao các từ ngữ, đặc biệt là từ bạn! Canonical rất thân thiện, trong trường hợp này. 'plt.setp' là một" matlab-ism ", và một vòng lặp rõ ràng có lẽ là nhiều hơn nữa pythonic. Là một MATLAB chuyển đổi, bản thân mình, 'setp' cảm thấy tự nhiên, nhưng cho mỗi của riêng mình. Hoặc là một trong số đó là khá dễ đọc, i.m.o. –

304

Có một cách đơn giản hơn trên thực tế. Tôi vừa tìm thấy:

import matplotlib.pyplot as plt 
# We prepare the plot 
fig = plt.figure(1) 
# We define a fake subplot that is in fact only the plot. 
plot = fig.add_subplot(111) 

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

Điều này chỉ trả lời kích thước label một phần câu hỏi của bạn.

13

Bạn cũng có thể thay đổi các thông số hiển thị nhãn như fontsize với một dòng như thế này:

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

Ngoài ra, bạn chỉ có thể làm:

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

Trong các phiên bản hiện tại của Matplotlib, bạn có thể làm axis.set_xticklabels(labels, fontsize='small') .

10

Đối với phông chữ nhỏ hơn, tôi sử dụng

ax1.set_xticklabels (xticklabels, fontsize = 7)

và nó hoạt động!

52

Để xác định cả hai kích thước phông chữ và luân chuyển cùng một lúc, hãy thử này:

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

Đây là câu trả lời tốt nhất và đơn giản nhất. – user1271772

4

plt.tick_params (trục = 'cả hai', mà = 'nhỏ', labelsize = 12)

+0

Đây là câu trả lời duy nhất hoạt động nếu bạn muốn thay đổi phông chữ mà không cần đặt nhãn mới. –

Các vấn đề liên quan