Matplotlib टिक लेबल फ़ॉन्ट का आकार छोटा बनाते हैं


299

एक matplotlib आकृति में, मैं ax1.set_xticklabels()छोटे का उपयोग करके टिक लेबल के लिए फ़ॉन्ट आकार कैसे बना सकता हूं ?

इसके अलावा, कोई इसे क्षैतिज से ऊर्ध्वाधर तक कैसे घुमा सकता है?


इस प्रश्न को पूछने के लिए धन्यवाद, मैं अभी इस समस्या को हल करने की कोशिश कर रहा हूं। मुझे यहां पर दृढ़ता से नहीं माना जाता है, लेकिन मतदाताओं को लगता है कि सबसे अच्छा जवाब स्वीकार नहीं किया गया है। तुम क्या सोचते हो?
हारून हॉल

क्या मैंने ठीक से पढ़ा है कि matplotlib में फोंटाइज को बदलने के लिए कम से कम 5 अलग-अलग तरीके हैं? : डी
अकालगर

जवाबों:


127

कृपया ध्यान दें कि एमपीएल के नए संस्करणों में इस कार्य के लिए एक शॉर्टकट है। इस प्रश्न के अन्य उत्तर में एक उदाहरण दिखाया गया है: 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 गुण से नफरत करता है, जाहिरा तौर पर!)
जो किंग्टन

@ जो: यह मेरे बारे में पहली बार सुन रहा है is_last_row(), धन्यवाद! मैंने plt.setpअतीत में उपयोग किया है, और यह निश्चित रूप से निश्चित नहीं था कि यह टिक लेबल को अनुकूलित करने के एक अधिक विहित तरीके का प्रतिनिधित्व करता है। आपने उस संदेह को हटा दिया है, धन्यवाद। अधिक मोटे तौर पर: आपके उत्तर, विशेष रूप से matplotlibटैग में, अक्सर मुझे खौफ में छोड़ देते हैं। अच्छा काम करते रहो।
यांत्रिक_मीट

1
धन्यवाद!! मैं विशेष रूप से आप से दयालु शब्दों की सराहना करता हूं! इस मामले में कैनोनिकल बहुत सापेक्ष है। plt.setpएक "मैटलैब-इसम" है, और एक स्पष्ट लूप संभवतः बहुत अधिक पायथोनिक है। मतलबी होने के नाते, अपने आप को, setpस्वाभाविक लगता है, लेकिन प्रत्येक को अपना। या तो एक बहुत पठनीय है, इमो
जो किंगटन

50
नए संस्करणों में मैंने पाया कि आपको लेबल वाले पैरामीटर का उपयोग करना था : उदाहरण के लिएax.tick_params(axis='x', labelsize=8)
व्लाद्न

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'संशोधित करने के लिए
love.by.Jesus

221

एक ही समय में फ़ॉन्ट आकार और रोटेशन दोनों को निर्दिष्ट करने के लिए, यह प्रयास करें:

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

4
ध्यान दें कि MATLAB की तरह pyplot इंटरफ़ेस के साथ काम करते समय इसका उपयोग किया जाता है। ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस tick_params () एक्सिस ऑब्जेक्ट की विधि या set_tick_params () अक्ष ऑब्जेक्ट की विधि का उपयोग किया जाना चाहिए (अन्य उत्तर देखें)।

54

वैकल्पिक रूप से, आप बस कर सकते हैं:

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

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

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

@DavidStansby मुझे नहीं लगता कि यह सच है। मेरे पास यह सटीक मुद्दा था (ऊपर उल्लेख किया गया था) और इस समाधान से अलग वैकल्पिक पद्धति का उपयोग करने में सक्षम था। उपयोगax.xaxis.set_tick_params(labelsize=20)
काइल स्वानसन

1
सबसे सरल उत्तर, कुल्हाड़ी वस्तु के संदर्भ की आवश्यकता नहीं है
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के labelsबारे में कोई डेटा के साथ और काम करता है axes

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.