วิธีเปลี่ยนขนาดคำอธิบายด้วย matplotlib.pyplot


324

คำถามง่ายๆที่นี่: ฉันพยายามทำให้ขนาดของคำอธิบายใช้matplotlib.pyplotน้อยลง (เช่นข้อความที่เล็กลง) รหัสที่ฉันใช้มีดังนี้:

plot.figure()
plot.scatter(k, sum_cf, color='black', label='Sum of Cause Fractions')
plot.scatter(k, data[:, 0],  color='b', label='Dis 1: cf = .6, var = .2')
plot.scatter(k, data[:, 1],  color='r',  label='Dis 2: cf = .2, var = .1')
plot.scatter(k, data[:, 2],  color='g', label='Dis 3: cf = .1, var = .01')
plot.legend(loc=2)

คำตอบ:


543

คุณสามารถตั้งค่าขนาดแบบอักษรสำหรับคำอธิบายได้โดยปรับpropคำหลัก

plot.legend(loc=2, prop={'size': 6})

การดำเนินการนี้จะใช้พจนานุกรมของคำหลักที่เกี่ยวข้องกับmatplotlib.font_manager.FontPropertiesคุณสมบัติ ดูเอกสารประกอบสำหรับคำอธิบาย :

อาร์กิวเมนต์คำหลัก:

prop: [ None | FontProperties | dict ]
    A matplotlib.font_manager.FontProperties instance. If prop is a 
    dictionary, a new instance will be created with prop. If None, use
    rc settings.

นอกจากนี้ยังสามารถเป็นของรุ่น1.2.1fontsizeการใช้คำหลัก


1
คุณบอกฉันได้ไหมว่าฉันจะหารายละเอียดได้จากplot.rcParams.updateที่ไหน
haccks

64

สิ่งนี้ควรทำ

import pylab as plot
params = {'legend.fontsize': 20,
          'legend.handlelength': 2}
plot.rcParams.update(params)

จากนั้นทำพล็อตหลังจากนั้น

มี rcParams อื่น ๆ อีกมากมายพวกเขายังสามารถตั้งค่าในไฟล์ matplotlibrc

สมมุติว่าคุณสามารถเปลี่ยนมันผ่านmatplotlib.font_manager.FontPropertiesอินสแตนซ์ได้ด้วย แต่นี่ฉันไม่รู้จะทำยังไง -> ดูคำตอบของ Yann


2
หรือmatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric

2
ที่ควรจะเป็นlegend.handlelengthแทนที่จะเป็นlegend.linewidth
Emmet B

สมาชิก get_default_size () ของ FontManager ส่งคืนขนาดเริ่มต้น สำหรับฉันมันคือ 12
guhur

1
การใช้ "PyLab" ไม่ได้รับการสนับสนุนอีกต่อไป: matplotlib.org/faq/…
Hagbard

51

การใช้ import matplotlib.pyplot as plt

วิธีที่ 1: ระบุแบบอักษรเมื่อเรียกใช้คำอธิบายแผนภูมิ (ซ้ำ)

plt.legend(fontsize=20) # using a size in points
plt.legend(fontsize="x-large") # using a named size

ด้วยวิธีนี้คุณสามารถตั้งค่าฟอนต์สำหรับแต่ละตำนานที่สร้าง (อนุญาตให้คุณมีหลายตำนานที่มีแบบอักษรต่างกัน) อย่างไรก็ตามคุณจะต้องพิมพ์ทุกอย่างด้วยตนเองทุกครั้งที่คุณสร้างคำอธิบาย

(หมายเหตุ: @ Mathias711 แสดงรายการแบบอักษรที่มีชื่อที่มีอยู่ในคำตอบของเขา)

วิธีที่ 2: ระบุแบบอักษรใน rcParams (สะดวก)

plt.rc('legend',fontsize=20) # using a size in points
plt.rc('legend',fontsize='medium') # using a named size

ด้วยวิธีนี้คุณจะตั้งค่าฟอนต์คำอธิบายแผนภูมิเริ่มต้นและตำนานทั้งหมดจะใช้งานโดยอัตโนมัติเว้นแต่ว่าคุณจะระบุวิธีใช้เป็นอย่างอื่น 1 ซึ่งหมายความว่าคุณสามารถตั้งค่าฟอนต์คำอธิบายแผนภูมิได้ที่จุดเริ่มต้นของรหัสและไม่ต้องกังวลกับการตั้งค่า .

หากคุณใช้ขนาดเช่นชื่อ'medium'แล้วข้อความตำนานจะขนาดกับโลกในfont.size rcParamsเพื่อเปลี่ยนการfont.sizeใช้งานplt.rc(font.size='medium')


1
เพียงเพื่อแจ้งให้ผู้เริ่มต้น Python (อย่างฉัน): วิธีที่ 1 ใช้งานได้หลังจากสร้างพล็อต (หลังจากบรรทัดพล็อต ()) และวิธีที่ 2 ใช้งานได้ก่อนสร้างพล็อตเท่านั้น ขอบคุณ. ฉันเห็นด้วยกับ @Scott Gigante นี่ควรเป็นคำตอบ!
Mateus da Silva Teixeira

42

นอกจากนี้ยังมีไม่กี่ชื่อfontsizesนอกเหนือจากขนาดในจุดนี้

xx-small
x-small
small
medium
large
x-large
xx-large

การใช้งาน:

pyplot.legend(loc=2, fontsize = 'x-small')

19

มีการตั้งค่าหลายรายการสำหรับการปรับขนาดคำอธิบาย ทั้งสองฉันพบว่ามีประโยชน์มากที่สุดคือ:

  • labelspacing: ซึ่งกำหนดระยะห่างระหว่างรายการฉลากเป็นทวีคูณของขนาดตัวอักษร ตัวอย่างเช่นตัวอักษร 10 จุดlegend(..., labelspacing=0.2)จะลดระยะห่างระหว่างรายการถึง 2 คะแนน ค่าเริ่มต้นในการติดตั้งของฉันคือประมาณ 0.5
  • prop: ซึ่งอนุญาตให้ควบคุมขนาดแบบอักษรทั้งหมดได้อย่างสมบูรณ์คุณสามารถตั้งค่าแบบอักษร 8 จุดlegend(..., prop={'size':8})ได้ ค่าเริ่มต้นในการติดตั้งของฉันคือประมาณ 14 คะแนน

นอกจากนี้เอกสารตำนานแสดงจำนวนของการขยายอื่น ๆ และพารามิเตอร์ระยะห่าง ได้แก่ : borderpad, handlelength, handletextpad, และborderaxespad columnspacingทั้งหมดเหล่านี้เป็นไปตามรูปแบบเดียวกันกับการกำหนดพื้นที่ป้ายกำกับและพื้นที่ในแบบอักษรทวีคูณ

ค่าเหล่านี้ยังสามารถตั้งค่าให้เป็นค่าเริ่มต้นสำหรับตัวเลขทั้งหมดโดยใช้ไฟล์ matplotlibrc


5

ในการติดตั้งของฉัน FontProperties เปลี่ยนขนาดตัวอักษรเท่านั้น แต่ก็ยังใหญ่เกินไปและเว้นระยะห่าง ฉันพบพารามิเตอร์ในpyplot.rcParams: legend.labelspacingซึ่งฉันเดาว่าถูกตั้งค่าเป็นเศษส่วนของขนาดตัวอักษร ฉันเปลี่ยนมันด้วย

pyplot.rcParams.update({'legend.labelspacing':0.25})

ฉันไม่แน่ใจว่าจะระบุให้ฟังก์ชัน pyplot.legend - ผ่านไปได้อย่างไร

prop={'labelspacing':0.25}

หรือ

prop={'legend.labelspacing':0.25}

กลับมาพร้อมกับข้อผิดพลาด


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