Matplotlib ทำให้ขนาดตัวอักษรป้ายเห็บมีขนาดเล็กลง


299

ในรูป matplotlib ฉันจะทำให้ขนาดตัวอักษรสำหรับป้ายกำกับเห็บใช้ax1.set_xticklabels()น้อยลงได้อย่างไร

นอกจากนี้เราจะหมุนจากแนวนอนเป็นแนวตั้งได้อย่างไร


ขอบคุณที่ถามคำถามนี้ฉันพยายามแก้ไขปัญหานี้ทันที ฉันไม่เห็นด้วยอย่างยิ่งที่นี่ แต่ดูเหมือนว่าผู้มีสิทธิเลือกตั้งคิดว่าคำตอบที่ดีที่สุดไม่ใช่คำตอบที่ยอมรับได้ คุณคิดอย่างไร?
Aaron Hall

ฉันไม่ถูกต้องอ่านว่ามีอย่างน้อย 5 วิธีในการเปลี่ยนแบบอักษรใน matplotlib? : D
famargar

คำตอบ:


127

โปรดทราบว่า MPL เวอร์ชันใหม่มีทางลัดสำหรับงานนี้ ตัวอย่างจะแสดงในคำตอบอื่น ๆ สำหรับคำถามนี้: https://stackoverflow.com/a/11386056/42346

รหัสด้านล่างมีวัตถุประสงค์เพื่อเป็นตัวอย่างและอาจไม่จำเป็นต้องปรับให้เหมาะสม

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

ป้อนคำอธิบายรูปภาพที่นี่


84
เช่นเดียวกับกัน: plt.setpแทนที่จะบ่วงผ่านวัตถุฉลากเห็บคุณสามารถใช้ (นอกจากนี้ยังมีลักษณะที่ax.tick_params) plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)ตัวอย่างเช่นคุณก็สามารถทำได้ นอกจากนี้วัตถุแกนยังมีax.is_last_row()วิธีการที่มีประโยชน์ในกรณีเช่นตัวอย่างของคุณ แทนการที่คุณสามารถทำได้if i != len... if not ax.is_last_row()(ทำไมมันเป็นวิธีการฉันไม่มีเงื่อนงำ ... Matplotlib เกลียดคุณสมบัติเห็นได้ชัด!)
Joe Kington

@Joe: นี่เป็นครั้งแรกที่ฉันได้ยินเกี่ยวกับis_last_row()ขอบคุณ! ฉันเคยใช้plt.setpในอดีตและไม่จำเป็นต้องแน่ใจว่ามันเป็นวิธีที่เป็นที่ยอมรับมากขึ้นในการปรับแต่งป้ายกำกับเห็บ คุณได้ลบข้อสงสัยนั้นแล้วขอบคุณ กว้างกว่า: คำตอบของคุณโดยเฉพาะในmatplotlibแท็กมักทำให้ฉันตกตะลึง ติดตามการทำงานที่ดี.
mechanical_meat

1
ขอบคุณ !! ฉันขอขอบคุณคำพูดที่ใจดีโดยเฉพาะจากคุณ! Canonical นั้นเป็นญาติกันมากในกรณีนี้ plt.setpคือ "matlab-ism" และลูปที่ชัดเจนน่าจะเป็น pythonic มากกว่า การเป็น MATLAB ทำให้ฉันsetpรู้สึกเป็นธรรมชาติ แต่เปลี่ยนไปเป็นของตัวเอง อย่างใดอย่างหนึ่งสามารถอ่านได้ค่อนข้าง imo
Joe Kington

50
ในเวอร์ชันใหม่ฉันพบว่าคุณต้องใช้พารามิเตอร์labelize : เช่นax.tick_params(axis='x', labelsize=8)
Vladtn

ควรจะเป็นget_ticklabelsไม่ได้get_major_ticks
Jez

505

มีวิธีที่ง่ายกว่าจริง ๆ ฉันเพิ่งค้นพบ:

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)

นี่เป็นเพียงคำตอบสำหรับขนาดของlabelคำถามของคุณ


2
ใช้axis = 'x'หรือ axis = 'y'แก้ไขเพียงแกน
ดวงที่รักโดยพระเยซู

221

หากต้องการระบุทั้งขนาดตัวอักษรและการหมุนพร้อมกันให้ลองทำดังนี้:

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

4
โปรดทราบว่าสิ่งนี้จะใช้เมื่อทำงานกับอินเตอร์เฟส pyplot เหมือน MATLAB ในกรณีของวิธีการเชิงวัตถุติดต่อ tick_params () วิธีการของวัตถุแกนหรือวิธี set_tick_params () ของวัตถุแกนควรใช้ (ดูคำตอบอื่น ๆ )
wombatonfire


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

นี่เป็นคำตอบเดียวที่ใช้ได้ผลถ้าคุณต้องการเปลี่ยนแบบอักษรโดยไม่ต้องตั้งป้ายกำกับใหม่
David Stansby

@DavidStans โดยฉันไม่เชื่อว่านี่เป็นเรื่องจริง ฉันมีปัญหาตรงนี้ (กล่าวถึงข้างต้น) และสามารถใช้วิธีอื่นที่แตกต่างจากโซลูชันนี้ ใช้ax.xaxis.set_tick_params(labelsize=20)
Kyle Swanson

1
คำตอบที่ง่ายที่สุดไม่ต้องการการอ้างอิงถึงออบเจกต์ ax
jeremy_rutman

26

ทางเลือกอื่น

ฉันมีแปลงสองแปลงเคียงข้างกันและต้องการปรับป้ายกำกับแยกต่างหาก

การแก้ปัญหาข้างต้นใกล้ แต่พวกเขาก็ไม่ได้ทำงานให้ฉัน ผมพบว่าวิธีการแก้ปัญหาของฉันจาก matplotlib นี้หน้า

ax.xaxis.set_tick_params(labelsize=20)

นี่เป็นการหลอกลวงและตรงประเด็น สำหรับกรณีการใช้งานของฉันมันเป็นพล็อตด้านขวาที่จำเป็นต้องปรับเปลี่ยน สำหรับพล็อตด้านซ้ายตั้งแต่ฉันสร้างป้ายกำกับขีดใหม่ฉันสามารถปรับแบบอักษรในกระบวนการเดียวกับการตั้งค่าป้ายกำกับ

กล่าวคือ

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

ดังนั้นฉันใช้สำหรับพล็อตที่เหมาะสม

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

ความฉลาดเล็กน้อย ... ฉันรู้ว่า ... แต่ฉันหวังว่านี่จะช่วยคนอื่น :)

คะแนนโบนัสหากใครรู้วิธีปรับขนาดตัวอักษรของลำดับความสำคัญ

ป้อนคำอธิบายรูปภาพที่นี่


22

ในรุ่นปัจจุบันของ Matplotlib axis.set_xticklabels(labels, fontsize='small')คุณสามารถทำได้


1
นั่นบังคับให้คุณระบุlabelsเช่นกัน มันจะดีกว่าถ้าเราสามารถเปลี่ยนขนาดตัวอักษรได้
Guimoute

16

คุณยังสามารถเปลี่ยนพารามิเตอร์การแสดงฉลากเช่นแบบอักษรด้วยบรรทัดเช่นนี้:

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

1
ฉันคิดว่าการใช้ความเข้าใจในรายการที่มีผลข้างเคียงไม่ใช่วิธีปฏิบัติที่ดีที่สุด ฉันขอแนะนำให้ใช้มาตรฐานสำหรับการวนซ้ำแทน
jjmontes

14

สำหรับตัวอักษรขนาดเล็กฉันใช้

ax1.set_xticklabels(xticklabels, fontsize=7)

และมันใช้งานได้!


คุณกำหนด xticklabels อย่างไร
mLstudent33

10

การทำงานต่อไปนี้สำหรับฉัน:

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

ประโยชน์ของการดังกล่าวข้างต้นคือคุณไม่จำเป็นที่จะต้องให้arrayการและผลงานที่มีข้อมูลใดlabelsaxes

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.