मैं Matplotlib में फिगर का शीर्षक और एक्सिस लेबल फ़ॉन्ट आकार कैसे सेट करूँ?


530

मैं इस तरह से Matplotlib में एक आंकड़ा बना रहा हूँ:

from matplotlib import pyplot as plt

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')

मैं आकृति शीर्षक और अक्ष लेबल के लिए फ़ॉन्ट आकार निर्दिष्ट करना चाहता हूं। मुझे तीनों को अलग-अलग फॉन्ट साइज की जरूरत है, इसलिए एक ग्लोबल फॉन्ट साइज ( mpl.rcParams['font.size']=x) सेट करना वह नहीं है जो मैं चाहता हूं। मैं व्यक्तिगत रूप से आकृति शीर्षक और अक्ष लेबल के लिए फ़ॉन्ट आकार कैसे सेट करूं?


1
तो मैं अपने को जोड़ने की कोशिश की मैं उत्सुक था mpl.rcParams['font.size'] = 2010 और कोशिश की बदलते मूल्यों और 14. सबसे पहले मैंने पाया कि मैं त्रुटियों मिल गया जब तक कि मैं बदल mplकरने के लिए plt। उस परिवर्तन ने त्रुटि को दूर कर दिया लेकिन तब कोड की लाइन का मेरे शीर्षक या लेबल पर कोई प्रभाव नहीं पड़ा। यकीन है कि यह वाक्यविन्यास सही है?
TMWP

अब मैं स्वीकार किए गए उत्तर पर टिप्पणियों से सोच रहा हूं कि समस्या मेरा आयात बयान हो सकती है, हालांकि अगर मैंने आयात नहीं किया तो यह एक त्रुटि नहीं फेंकती है, क्योंकि कमांड मेरे से परे है। क्या एक और आयात लाइन है जिसका उपयोग आपने mplकमांड का परीक्षण करते समय किया था?
टीएमडब्लूपी

जवाबों:


772

जैसे पाठ के साथ काम कर कार्य label, titleआदि के रूप में ही पैरामीटर स्वीकार matplotlib.text.Text। फ़ॉन्ट आकार के लिए आप इसका उपयोग कर सकते हैं size/fontsize:

from matplotlib import pyplot as plt    

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title', fontsize=20)
plt.xlabel('xlabel', fontsize=18)
plt.ylabel('ylabel', fontsize=16)
fig.savefig('test.jpg')

विश्व स्तर पर सेटिंग titleऔर labelआकार के लिए, mpl.rcParamsशामिल हैं axes.titlesizeऔर axes.labelsize। (पेज से):

axes.titlesize      : large   # fontsize of the axes title
axes.labelsize      : medium  # fontsize of the x any y labels

(जहां तक ​​मैं देख सकता हूं, सेट करने का कोई तरीका नहीं है xy अलग-अलग आकार और लेबल ।)

और मैं देख रहा हूं कि axes.titlesizeयह प्रभावित नहीं करता है suptitle। मुझे लगता है, आपको इसे मैन्युअल रूप से सेट करने की आवश्यकता है।


धन्यवाद! वहाँ एक तरीका है कि विश्व स्तर पर स्पष्ट रूप से (suptitle, xlabel, ylabel) सेट करने के लिए है? मैं बहुत सारे चार्ट बना रहा हूं और बस इसे एक बार निर्दिष्ट करना चाहता
हूं

@ vasek1: मैंने सोचा था कि आप वैश्विक सेटिंग नहीं चाहते थे :)। उसके लिए आपको चाहिए mpl.rcParams। मैंने अपना उत्तर संपादित कर दिया है।
अवारिस

16
खुद की तरह किसी और को टाइटल बदलने के उपाय की तलाश में:plt.rcParams.update({'axes.titlesize': 'small'})
tommy.carstensen

से rcParamsलिंक का उपयोग करें, figure.titlesizeके अलावा axes.titlesize
मैड फिजिसिस्ट

1
@AlexanderMcFarlane। मैं भागा python -c 'import matplotlib as mpl; print(mpl.__version__); print("figure.titlesize" in mpl.rcParams.keys())'। परिणाम है 1.5.1, True। 1) आप matplotlib के किस संस्करण का उपयोग कर रहे हैं? अजगर का क्या संस्करण? 2) क्या यह एक बग हो सकता है जहां किसी कारण से यह स्वीकार करता है strलेकिन unicodePy2 में नहीं ?
मैड फिजिसिस्ट

90

आप इसे rcParams शब्दकोश के माध्यम से विश्व स्तर पर भी कर सकते हैं:

import matplotlib.pylab as pylab
params = {'legend.fontsize': 'x-large',
          'figure.figsize': (15, 5),
         'axes.labelsize': 'x-large',
         'axes.titlesize':'x-large',
         'xtick.labelsize':'x-large',
         'ytick.labelsize':'x-large'}
pylab.rcParams.update(params)

5
इसके अलावा अन्य आकार क्या हैं 'x-large'?
मार्टिन थोमा

15
'xx-small', 'x-small', 'small', 'medium', 'बड़ा', 'x-large', 'xx-large'। देखें matplotlib.org/api/...
tsando

pylab.rcParams.keys()मापदंडों की पूरी सूची देखने के लिए उपयोग करें ।
निर्मल

धन्यवाद। वहाँ खिताब के लिए विश्व स्तर पर सेट स्पष्ट संख्यात्मक आकार और अक्ष-लेबल के बजाय हमेशा कर रही करने के लिए एक रास्ता है ax.set_title('some title', fontsize=15), ax.set_xlabel('some xlabel', fontsize=12)? ऐसा लगता है जैसे rcParamsकेवल तार को स्वीकार करता है।
टाइमजैब

4
आप संख्याओं का उपयोग भी कर सकते हैं ...'axes.labelsize': 32,
mimoralea

65

यदि आप axअपने प्लॉटिंग को करने के लिए वस्तुओं का उपयोग करने के लिए अधिक अभ्यस्त हैं, तो आपको ax.xaxis.label.set_size()याद रखने में आसान हो सकता है, या कम से कम एक ipython टर्मिनल में टैब का उपयोग करना आसान हो सकता है। यह प्रभाव को देखने के बाद एक redraw ऑपरेशन की जरूरत है। उदाहरण के लिए:

import matplotlib.pyplot as plt

# set up a plot with dummy data
fig, ax = plt.subplots()
x = [0, 1, 2]
y = [0, 3, 9]
ax.plot(x,y)

# title and labels, setting initial sizes
fig.suptitle('test title', fontsize=12)
ax.set_xlabel('xlabel', fontsize=10)
ax.set_ylabel('ylabel', fontsize='medium')   # relative to plt.rcParams['font.size']

# setting label sizes after creation
ax.xaxis.label.set_size(20)
plt.draw()

मैं समान आकार सेट करने के बाद इसे बनाने का तरीका नहीं जानता।


fig.suptitle('test title', fontsize = 20)काम करने लगता है। ax.set_xlabel('xlabel', fontsize = 20)' also works, in which case we can do away with ax.xaxis.label.set_size (20) `।
T_T

1
@T_T यह सच है, और ये रूप ऊपर के एवारिस के उत्तर के समान हैं। मैं उन्हें पूर्णता के लिए जोड़ूंगा। ax.xaxis.label.set_size()जब मैं एक ipython साजिश के साथ अंतःक्रियात्मक रूप से काम कर रहा हूं , तब भी मुझे इसके लिए एक उपयोग मिल रहा है और मैं विभिन्न प्रकार के फ़ॉन्ट आकारों का एक त्वरित दृश्य मूल्यांकन करना चाहता हूं।
spinup

क्या आप जानते हैं कि कुल्हाड़ी की वस्तुओं और आकृति की वस्तुओं का उपयोग करने के बीच कोई (छिपा हुआ) अंतर है, या दोनों पूरी तरह से बराबर हैं? कुछ विशेषताओं के लिए अलग-अलग इंटरफेस क्यों हैं? (plt.xlabel () बनाम ax.set_xlabel ())
normanius

1
@normanius, यदि आप उपरोक्त उदाहरण में कुल्हाड़ी और अंजीर का मतलब रखते हैं, तो वे काफी भिन्न वस्तुएं हैं - अंजीर समग्र आकृति है, जिसमें कई कुल्हाड़ी हो सकती हैं। इसलिए अंजीर और कुल्हाड़ी के अलग-अलग गुण हैं। Pyplot प्रकार के कॉल और ऑब्जेक्ट कॉल (जैसे plt.xlabel()बनाम ax.set_xlabel()जैसा आप कहते हैं) के बीच अंतर के संदर्भ में , वे समतुल्य हैं, इस चेतावनी के साथ कि plt.*फ़ंक्शन वर्तमान अक्ष / आकृति पर काम करते हैं । तो यह आप कई कुल्हाड़ियों के साथ एक आंकड़ा सेट, आप शायद ax1.set_xlabel()भ्रम से बचने के लिए जैसे स्पष्ट कॉल का उपयोग करना चाहते हैं ।
पालक

19

केवल शीर्षक का फ़ॉन्ट (और अक्ष का फ़ॉन्ट नहीं) संशोधित करने के लिए मैंने इसका उपयोग किया:

import matplotlib.pyplot as plt
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.set_title('My Title', fontdict={'fontsize': 8, 'fontweight': 'medium'})

Fontdict सभी kwargs को matplotlib.text.Text से स्वीकार करता है ।


8

प्रति आधिकारिक गाइड , के उपयोग pylabनहीं रह सिफारिश की है। matplotlib.pyplotइसके बजाय सीधे इस्तेमाल किया जाना चाहिए।

ग्लोबली सेटिंग फ़ॉन्ट आकार के rcParamsसाथ किया जाना चाहिए

import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 16
plt.rcParams['axes.titlesize'] = 16

# or

params = {'axes.labelsize': 16,
          'axes.titlesize': 16}
plt.rcParams.update(params)

# or

import matplotlib as mpl
mpl.rc('axes', labelsize=16, titlesize=16)

# or 

axes = {'labelsize': 16,
        'titlesize': 16}
mpl.rc('axes', **axes)

का उपयोग कर चूक को बहाल किया जा सकता है

plt.rcParams.update(plt.rcParamsDefault)

आप matplotlib कॉन्फ़िगरेशन डायरेक्टरी के तहत डायरेक्टरी में एक स्टाइल शीट बनाकर भी ऐसा कर सकते हैं (आप अपनी कॉन्फिगरेशन डायरेक्टरी प्राप्त कर सकते हैं )। शैली पत्रक प्रारूप हैstylelibmatplotlib.get_configdir()

axes.labelsize: 16
axes.titlesize: 16

यदि आपके पास एक स्टाइल शीट है /path/to/mpl_configdir/stylelib/mystyle.mplstyleतो आप इसके माध्यम से उपयोग कर सकते हैं

plt.style.use('mystyle')

# or, for a single section

with plt.style.context('mystyle'):
    # ...

आप एक matplotlibrc फ़ाइल भी बना सकते हैं (या संशोधित कर सकते हैं) जो प्रारूप को साझा करती है

axes.labelsize = 16
axes.titlesize = 16

इस पर निर्भर करता है कि इन परिवर्तनों को संशोधित करने वाली matplotlibrc फ़ाइल का उपयोग केवल वर्तमान कार्यशील निर्देशिका के लिए किया जाएगा, जिसमें सभी कार्यशील निर्देशिकाओं के लिए, जिसमें matplotlibrc फ़ाइल नहीं है, या सभी कार्य निर्देशिकाओं के लिए, जिनके पास matplotlibrc फ़ाइल नहीं है और जहाँ अन्य matplotlibrc फ़ाइल नहीं है निर्दिष्ट किया गया है। इस अनुभाग को देखें अधिक जानकारी के लिए अनुरूपण matplotlib पेज के।

rcParamsकुंजियों की एक पूरी सूची के माध्यम से प्राप्त किया जा सकता है plt.rcParams.keys(), लेकिन आपके पास मौजूद फ़ॉन्ट आकारों को समायोजित करने के लिए ( यहाँ से उद्धृत इटैलिक्स )

  • axes.labelsize- एक्स और वाई लेबल के फ़ॉन्ट्स
  • axes.titlesize- कुल्हाड़ियों शीर्षक के फ़ॉन्ट्स
  • figure.titlesize- आकृति शीर्षक का आकार ( Figure.suptitle())
  • xtick.labelsize- टिक लेबल के फ़ॉन्ट्स
  • ytick.labelsize- टिक लेबल के फ़ॉन्ट्स
  • legend.fontsize- किंवदंतियों के लिए FONTSIZE ( plt.legend(),fig.legend() )
  • legend.title_fontsize- किंवदंती खिताब के लिए फ़ॉन्ट्स, Noneडिफ़ॉल्ट कुल्हाड़ियों के समान सेट। उपयोग उदाहरण के लिए इस उत्तर को देखें ।

जिनमें से सभी स्ट्रिंग आकार {'xx-small', 'x-small', 'smaller', 'small', 'medium', 'large', 'larger', 'x-large', 'xxlarge'}या एक floatमें स्वीकार करते हैं pt। स्ट्रिंग आकार को डिफ़ॉल्ट फ़ॉन्ट आकार के सापेक्ष परिभाषित किया गया है जो इसके द्वारा निर्दिष्ट किया गया है

  • font.size- पाठ के लिए डिफ़ॉल्ट फ़ॉन्ट आकार, पीटीएस में दिया गया है। 10 पीटी मानक मान है

इसके अतिरिक्त, वजन निर्दिष्ट किया जा सकता है (हालांकि केवल डिफ़ॉल्ट के लिए यह प्रकट होता है)

  • font.weight- उपयोग किए गए फ़ॉन्ट का डिफ़ॉल्ट वजन text.Text। स्वीकार {100, 200, 300, 400, 500, 600, 700, 800, 900}या 'normal'(400), 'bold'(700) 'lighter', और 'bolder'( वर्तमान वजन के संबंध में )।

2

फ़ॉन्ट आकार बदलने के लिए एक वैकल्पिक समाधान पैडिंग को बदलना है। जब पायथन आपके पीएनजी को बचाता है, तो आप खुलने वाले संवाद बॉक्स का उपयोग करके लेआउट को बदल सकते हैं। कुल्हाड़ियों के बीच रिक्ति, पैडिंग यदि आप चाहें तो इस स्तर पर बदल सकते हैं।



-3

7 (सबसे अच्छा समाधान)

 from numpy import*
 import matplotlib.pyplot as plt
 X = linspace(-pi, pi, 1000)

class Crtaj:

    def nacrtaj(self,x,y):
         self.x=x
         self.y=y
         return plt.plot (x,y,"om")

def oznaci(self):
    return plt.xlabel("x-os"), plt.ylabel("y-os"), plt.grid(b=True)

6 (थोड़ा खराब समाधान)

from numpy import*
M = array([[3,2,3],[1,2,6]])
class AriSred(object):
    def __init__(self,m):
    self.m=m

def srednja(self):
    redovi = len(M)
    stupci = len (M[0])
    lista=[]
    a=0
    suma=0
    while a<stupci:
        for i in range (0,redovi):
            suma=suma+ M[i,a]
        lista.append(suma)
        a=a+1
        suma=0
    b=array(lista) 
    b=b/redovi
    return b



OBJ = AriSred(M)
sr = OBJ.srednja()

2
हालांकि यह कोड ओपी की समस्या का समाधान प्रदान कर सकता है, यह अत्यधिक अनुशंसा की जाती है कि आप इस संदर्भ में अतिरिक्त संदर्भ क्यों और / या कैसे प्रदान करते हैं। कोड केवल उत्तर आमतौर पर लंबे समय में बेकार हो जाते हैं क्योंकि भविष्य के दर्शकों को इसी तरह की समस्याओं का सामना करना पड़ता है जो समाधान के पीछे के तर्क को समझ नहीं सकते हैं।
ई। ज़ीनटिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.