Matplotlib làm cho nhãn tick kích thước phông chữ nhỏ hơn


299

Trong hình matplotlib, làm cách nào tôi có thể tạo kích thước phông chữ cho nhãn tick bằng cách sử dụng ax1.set_xticklabels()nhỏ hơn?

Hơn nữa, làm thế nào người ta có thể xoay nó từ ngang sang dọc?


Cảm ơn bạn đã hỏi câu hỏi này, tôi đang cố gắng 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ác cử tri nghĩ rằng 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?
Aaron Hall

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

Câu trả lời:


127

Xin lưu ý rằng các phiên bản mới hơn của MPL 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ã dưới đây là dành cho 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()

nhập mô tả hình ảnh ở đây


84
Chỉ là 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, hãy xem 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ó một ax.is_last_row()phương thức 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 đó là một phương pháp, tôi không có manh mối ... Matplotlib ghét tài sản, rõ ràng!)
Joe Kington

@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.setptrong quá khứ và không nhất thiết phải chắc chắn rằng nó đại diện cho một cách tùy chỉnh hơn các nhãn tick. Bạn đã xóa bỏ nghi ngờ đó, cảm ơn. Rộng hơn: câu trả lời của bạn, đặc biệt là trong matplotlibthẻ, thường khiến tôi sợ hãi. Kịp các công việc tuyệt vời.
Mechanical_meat

1
Cảm ơn!! Tôi đánh giá cao những lời tốt đẹp, đặc biệt là từ bạn! Canonical là rất tương đối, trong trường hợp này. plt.setplà một "matlab-ism", và một vòng lặp rõ ràng có lẽ nhiều pythonic hơn. Là một người chuyển đổi matlab, bản thân tôi, setpcảm thấy tự nhiên, nhưng với mỗi người của họ. Một trong hai là khá dễ đọc, imo
Joe Kington

50
Trong các phiên bản mới tôi thấy rằng bạn phải sử dụng các labelsize tham số: ví dụax.tick_params(axis='x', labelsize=8)
Vladtn

Nên get_ticklabelskhôngget_major_ticks
Jez

506

Có một cách đơn giản hơn thực sự. Tôi vừa tìm ra:

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)

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


2
Sử dụng axis = 'x'hoặc axis = 'y'để sửa đổi chỉ một trong các trục
yêu.by.Jesus

221

Để chỉ định cả kích thước phông chữ và xoay cùng một lúc, hãy thử điều này:

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

4
Lưu ý rằng điều này được sử dụng khi làm việc với giao diện pyplot giống MATLAB. Trong trường hợp sử dụng phương thức tick_params () của giao diện hướng đối tượng hoặc phương thức set_tick_params () của đối tượng trục nên được sử dụng (xem các câu trả lời khác).
wombatonfire

54

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

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

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

Đâ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.
David Stansby

@DavidStansby Tôi không tin đây là sự thật. Tôi đã có vấn đề chính xác này (Đề cập ở trên) và có thể sử dụng một phương pháp thay thế khác với giải pháp này. sử dụngax.xaxis.set_tick_params(labelsize=20)
Kyle Swanson

1
Câu trả lời đơn giản nhất, không yêu cầu tham chiếu đến đối tượng ax
jeremy_rutman

26

Một cách khác

Tôi có hai lô cạnh nhau và muốn điều chỉnh nhãn tick riêng.

Các giải pháp trên rất gần tuy nhiên chúng không phù hợp với tôi. Tôi tìm thấy giải pháp của tôi từ trang matplotlib này .

ax.xaxis.set_tick_params(labelsize=20)

Điều này đã lừa và đã đi thẳng vào vấn đề. Đối với trường hợp sử dụng của tôi, đó là cốt truyện bên phải cần được điều chỉnh. Đối với cốt truyện bên trái kể từ khi tôi tạo nhãn tick mới, tôi có thể điều chỉnh phông chữ trong cùng quy trình như đặt ing nhãn.

I E

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

do đó tôi đã sử dụng cho cốt truyện phù hợp,

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

Một sự tinh tế nhỏ ... tôi biết ... nhưng tôi hy vọng điều này sẽ giúp được ai đó :)

Điểm thưởng nếu có ai biết cách điều chỉnh kích thước phông chữ của thứ tự nhãn cường độ.

nhập mô tả hình ảnh ở đây


22

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


1
Điều đó buộc bạn phải xác định labelsquá. Sẽ tốt hơn nếu chúng ta có thể thay đổi kích thước phông chữ.
Hướng dẫn

16

Bạn cũng có thể thay đổi các tham số hiển thị nhãn như phông chữ bằng một dòng như thế này:

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

1
Tôi nghĩ rằng sử dụng danh sách hiểu có tác dụng phụ không phải là cách thực hành tốt nhất. Tôi muốn đề nghị sử dụng một tiêu chuẩn cho vòng lặp thay thế.
jjmontes

14

Đố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!


Làm thế nào để bạn xác định xticklabels?
mLstudent33

10

Sau đây làm việc cho tôi:

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

Ưu điểm của các bên trên là bạn không cần phải cung cấp arraycủa labelsvà làm việc với bất kỳ dữ liệu trên axes.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.