ในรูป matplotlib ฉันจะทำให้ขนาดตัวอักษรสำหรับป้ายกำกับเห็บใช้ax1.set_xticklabels()
น้อยลงได้อย่างไร
นอกจากนี้เราจะหมุนจากแนวนอนเป็นแนวตั้งได้อย่างไร
ในรูป matplotlib ฉันจะทำให้ขนาดตัวอักษรสำหรับป้ายกำกับเห็บใช้ax1.set_xticklabels()
น้อยลงได้อย่างไร
นอกจากนี้เราจะหมุนจากแนวนอนเป็นแนวตั้งได้อย่างไร
คำตอบ:
โปรดทราบว่า 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()
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 เกลียดคุณสมบัติเห็นได้ชัด!)
is_last_row()
ขอบคุณ! ฉันเคยใช้plt.setp
ในอดีตและไม่จำเป็นต้องแน่ใจว่ามันเป็นวิธีที่เป็นที่ยอมรับมากขึ้นในการปรับแต่งป้ายกำกับเห็บ คุณได้ลบข้อสงสัยนั้นแล้วขอบคุณ กว้างกว่า: คำตอบของคุณโดยเฉพาะในmatplotlib
แท็กมักทำให้ฉันตกตะลึง ติดตามการทำงานที่ดี.
plt.setp
คือ "matlab-ism" และลูปที่ชัดเจนน่าจะเป็น pythonic มากกว่า การเป็น MATLAB ทำให้ฉันsetp
รู้สึกเป็นธรรมชาติ แต่เปลี่ยนไปเป็นของตัวเอง อย่างใดอย่างหนึ่งสามารถอ่านได้ค่อนข้าง imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
ไม่ได้get_major_ticks
มีวิธีที่ง่ายกว่าจริง ๆ ฉันเพิ่งค้นพบ:
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
คำถามของคุณ
axis = 'x'
หรือ axis = 'y'
แก้ไขเพียงแกน
หากต้องการระบุทั้งขนาดตัวอักษรและการหมุนพร้อมกันให้ลองทำดังนี้:
plt.xticks(fontsize=14, rotation=90)
หรือคุณสามารถทำได้:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
plt.tick_params(axis='both', which='minor', labelsize=12)
ax.xaxis.set_tick_params(labelsize=20)
ทางเลือกอื่น
ฉันมีแปลงสองแปลงเคียงข้างกันและต้องการปรับป้ายกำกับแยกต่างหาก
การแก้ปัญหาข้างต้นใกล้ แต่พวกเขาก็ไม่ได้ทำงานให้ฉัน ผมพบว่าวิธีการแก้ปัญหาของฉันจาก 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)
ความฉลาดเล็กน้อย ... ฉันรู้ว่า ... แต่ฉันหวังว่านี่จะช่วยคนอื่น :)
คะแนนโบนัสหากใครรู้วิธีปรับขนาดตัวอักษรของลำดับความสำคัญ
ในรุ่นปัจจุบันของ Matplotlib axis.set_xticklabels(labels, fontsize='small')
คุณสามารถทำได้
labels
เช่นกัน มันจะดีกว่าถ้าเราสามารถเปลี่ยนขนาดตัวอักษรได้
คุณยังสามารถเปลี่ยนพารามิเตอร์การแสดงฉลากเช่นแบบอักษรด้วยบรรทัดเช่นนี้:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
สำหรับตัวอักษรขนาดเล็กฉันใช้
ax1.set_xticklabels(xticklabels, fontsize=7)
และมันใช้งานได้!
การทำงานต่อไปนี้สำหรับฉัน:
ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)
ประโยชน์ของการดังกล่าวข้างต้นคือคุณไม่จำเป็นที่จะต้องให้array
การและผลงานที่มีข้อมูลใดlabels
ๆaxes