আমি ম্যাটপ্লটলিবতে ফিগার শিরোনাম এবং অক্ষগুলির লেবেল ফন্টের আকারটি কীভাবে সেট করব?


530

আমি ম্যাটপ্ল্লিটিবের মতো একটি চিত্র তৈরি করছি:

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'] = 20থেকে 10 এবং চেষ্টা পরিবর্তন মূল্যবোধ ও 14 প্রথম আমি দেখেছি যে আমি ত্রুটি পেয়েছিলাম যদি না আমি পরিবর্তন mplকরতে plt। এই পরিবর্তনটি ত্রুটিটি সাফ করেছে কিন্তু তারপরে কোডের লাইনটি আমার শিরোনাম বা লেবেলে কোনও প্রভাব ফেলেনি। অবশ্যই এই বাক্য গঠন ঠিক আছে?
টিএমডাব্লুপি

এখন আমি স্বীকৃত উত্তরের মন্তব্যগুলি থেকে চিন্তা করছি যে সমস্যাটি আমার আমদানি বিবৃতি হতে পারে যদিও আমি যদি কমান্ডটি আমদানি না করি তবে এটি ত্রুটি क्यों না ছুঁড়ে দেয় me 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

(আমি যতদূর দেখতে পাচ্ছি, আলাদাভাবে মাপ সেট xএবং yলেবেল করার কোনও উপায় নেই ))

এবং আমি এটি axes.titlesizeপ্রভাবিত করে না suptitle। আমার ধারণা, আপনার এটি ম্যানুয়ালি সেট করা দরকার।


ধন্যবাদ! বিশ্বব্যাপী কিন্তু সুস্পষ্টভাবে (উপগ্রহ, এক্সলাবেল, ইলাবেল) জন্য সেট করার কোনও উপায় আছে কি? আমি প্রচুর চার্ট তৈরি করছি এবং এটি একবার নির্দিষ্ট করতে চাই ...
vasek1

@ ভ্যাসেক 1: আমি ভেবেছিলাম আপনি বিশ্বব্যাপী সেটিংটি চান না :)। তার জন্য আপনার দরকার 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) ম্যাটপ্ল্লিটিবের কোন সংস্করণ আপনি ব্যবহার করছেন? পাইথনের কোন সংস্করণ? 2) এটি কোনও বাগ হতে পারে যেখানে কোনও কারণে এটি গ্রহণ করে strতবে unicodeপাই 2 তে নয়?
ম্যাড পদার্থবিদ

90

আপনি আরসিপ্যারামস অভিধানের মাধ্যমেও বিশ্বব্যাপী এটি করতে পারেন:

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
'এক্সএক্স-ছোট', 'এক্স-ছোট', 'ছোট', 'মাঝারি', 'বড়', 'এক্স-লার্জ', 'এক্সএক্স-লার্জ'। দেখুন 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,
মিমোরালে

65

আপনি যদি axআপনার চক্রান্ত করার জন্য অবজেক্টগুলি ব্যবহার করতে আরও ax.xaxis.label.set_size()অভ্যস্ত হন তবে আপনি মনে রাখার চেয়ে সহজ বা আইপিথন টার্মিনালে ট্যাব ব্যবহার করে কমপক্ষে সহজতর খুঁজে পেতে পারেন। এর প্রভাবটি দেখার পরে এটি পুনরায় চিত্র অপারেশন করা দরকার বলে মনে হচ্ছে। উদাহরণ স্বরূপ:

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) '।
টিটিটি

1
@T_T এটি সত্য, এবং এই ফর্মগুলি উপরের আওয়ারিসের উত্তরের মতো। আমি তাদের সম্পূর্ণতার জন্য যুক্ত করব। আমি ax.xaxis.label.set_size()যখন আইপথন প্লটের সাথে ইন্টারেক্টিভভাবে কাজ করছি তার জন্য আমি এখনও একটি ব্যবহার খুঁজে পাচ্ছি এবং আমি বিভিন্ন ফন্টের আকারের দ্রুত চাক্ষুষ মূল্যায়ন করতে চাই।
স্পিনআপ

আপনি কি জানেন যে কুঠার অবজেক্ট এবং ফিগার অবজেক্ট ব্যবহারের মধ্যে কোনও (লুকানো) পার্থক্য রয়েছে, বা উভয়ই পুরোপুরি সমতুল্য? কিছু বৈশিষ্ট্যের জন্য কেন বিভিন্ন ইন্টারফেস রয়েছে? (plt.xlabel () বনাম ax.set_xlabel ())
নরম্যানিয়াস

1
@ নরম্যানিয়াস, উপরের উদাহরণে যদি আপনি কুড়াল এবং ডুমুর বোঝাতে চান তবে সেগুলি বেশ আলাদা বস্তু - ডুমুর সামগ্রিক চিত্র, যাতে বেশ কয়েকটি অক্ষ থাকে ax সুতরাং ডুমুর এবং কুড়াল বিভিন্ন বৈশিষ্ট্য আছে। পাইপলট প্রকারের কল এবং অবজেক্ট কলগুলির মধ্যে পার্থক্যের ক্ষেত্রে (যেমন আপনি যেমন বলছেন 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)

এছাড়াও আপনি একটি তৈরি করে এটা করতে পারেন শৈলী পত্রক মধ্যে stylelibঅধীনে ডিরেক্টরির matplotlib কনফিগারেশন ডিরেক্টরি (আপনার কাছ থেকে আপনার কনফিগারেশন ডিরেক্টরি পেতে পারেন matplotlib.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 ফোল্ডারটি নির্দিষ্ট করা হয়েছে। আরও তথ্যের জন্য কাস্টমাইজিং ম্যাটপ্ল্লিটিব পৃষ্ঠার এই বিভাগটি দেখুন ।

rcParamsকীগুলির একটি সম্পূর্ণ তালিকা এর মাধ্যমে পুনরুদ্ধার করা যেতে পারে plt.rcParams.keys()তবে আপনার ফন্টের আকারগুলি সামঞ্জস্য করার জন্য ( এখান থেকে উদ্ধৃত ইতরূপ )

  • axes.labelsize- এক্স এবং ওয়াই লেবেলের ফন্ট আকার
  • axes.titlesize- অক্ষ শিরোনাম ফন্টসাইজ
  • figure.titlesize- চিত্র শিরোনামের আকার ( Figure.suptitle())
  • xtick.labelsize- টিক লেবেলগুলির ফন্টসাইজ
  • ytick.labelsize- টিক লেবেলগুলির ফন্টসাইজ
  • legend.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
যদিও এই কোডটি ওপির সমস্যার সমাধান দিতে পারে, ততই সুপারিশ করা হয় যে আপনি কেন এবং / অথবা এই কোড প্রশ্নের উত্তর দেয় সে সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করুন। কোডের উত্তরগুলি সাধারণত দীর্ঘমেয়াদে অকেজো হয়ে যায় কারণ ভবিষ্যতের দর্শকদের অনুরূপ সমস্যার মুখোমুখি হওয়া সমাধানের পিছনে যুক্তি বুঝতে পারে না।
ই জেইটিনসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.