Matplotlib qrafikində font ölçüsünü necə dəyişdirmək olar?

Matplotlib qrafikində bütün elementlər üçün font ölçüsünü necə dəyişdirmək olar? (Ticks, etiket, başlıq)?

Bir gənə etiketini necə dəyişə biləcəyini bilirəm, bu istifadə edilir:

 import matplotlib matplotlib.rc('xtick', labelsize=20) matplotlib.rc('ytick', labelsize=20) 

Amma qalanları necə dəyişmək olar?

233
10 окт. Herman Schaaf tərəfindən 10 oktyabrda təyin olundu . 2010-10-10 13:43 '10 at 13:43 2010-10-10 13:43
@ 8 cavab

Matplotlib sənədlərindən ,

 font = {'family' : 'normal', 'weight' : 'bold', 'size' : 22} matplotlib.rc('font', **font) 

Bu, bütün elementlərin fontunu kvarqlar, font obyekti tərəfindən göstərilən fonta təyin edir.

Alternativ olaraq, rcParams update metodunu da bu cavabda təklif edildiyi kimi istifadə edə bilərsiniz:

 matplotlib.rcParams.update({'font.size': 22}) 

Sayfada mövcud olan xüsusiyyətlərin tam siyahısını tapa bilərsiniz.

265
10 окт. Herman Schaaf tərəfindən verilmiş cavab 10 oktyabr 2010-10-10 14:49 '10 at 2:49 PM 2010-10-10 14:49
 matplotlib.rcParams.update({'font.size': 22}) 
border=0
129
22 июня '11 в 17:46 2011-06-22 17:46 Cavab Marius Retegan tərəfindən 22 iyun 'da 17:46' də verildi 2011-06-22 17:46

Yazı tipini artıq yaradılan xüsusi bir sahəsi üçün dəyişdirmək istəyirsinizsə, aşağıdakıları cəhd edin:

 import matplotlib.pyplot as plt ax = plt.subplot(111, xlabel='x', ylabel='y', title='title') for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] + ax.get_xticklabels() + ax.get_yticklabels()): item.set_fontsize(20) 
120
20 февр. ryggyr tərəfindən verilmiş cavab 20 fevral. 2013-02-20 05:13 '13 da 5:13 2013-02-20 05:13

Yeniləmə: Bunu bir az daha yaxşı bir şəkildə həll etmək üçün cavabın altına baxın.
# 2 yeniləmə: Mən də əfsanə başlıq şriftində dəyişiklik tapdım.
# 3 yeniləmə: Matplotlib 2.0.0'da logarithmic baltalar üçün etiket etiketlərinə əsasən yazı tipinə qayıtmağa səbəb olan bir səhv var . 2.0.1-də sabit olmalıdır, amma cavabın ikinci hissəsində bir müddətə daxil oldum.

Bu cavab, əfsanə daxil olmaqla, bütün yazı tiplərini dəyişdirməyə çalışır və hər bir şey üçün müxtəlif şrift və ölçüləri istifadə etməyə çalışan hər kəs üçün nəzərdə tutulub. O, rc istifadə etmir (mənim üçün işə yaramır). Bu olduqca çətin, amma başqa üsulla şəxsən məşğul ola bilmədi. O, əsasən ryggyr cavab SO cavab digər cavabları ilə birləşdirir.

 import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as font_manager # Set the font dictionaries (for plot title and axis titles) title_font = {'fontname':'Arial', 'size':'16', 'color':'black', 'weight':'normal', 'verticalalignment':'bottom'} # Bottom vertical alignment for more space axis_font = {'fontname':'Arial', 'size':'14'} # Set the font properties (for use in legend) font_path = 'C:\Windows\Fonts\Arial.ttf' font_prop = font_manager.FontProperties(fname=font_path, size=14) ax = plt.subplot() # Defines ax variable by creating an empty plot # Set the tick labels font for label in (ax.get_xticklabels() + ax.get_yticklabels()): label.set_fontname('Arial') label.set_fontsize(13) x = np.linspace(0, 10) y = x + np.random.normal(x) # Just simulates some data plt.plot(x, y, 'b+', label='Data points') plt.xlabel("x axis", **axis_font) plt.ylabel("y axis", **axis_font) plt.title("Misc graph", **title_font) plt.legend(loc='lower right', prop=font_prop, numpoints=1) plt.text(0, 0, "Misc text", **title_font) plt.show() 

Bu metodun üstünlüyü ondan ibarətdir ki, bir neçə yazı tipli lüğətə malik olduğunuz üçün, müxtəlif yazı tipləri üçün müxtəlif şriftlər / ölçülər / ağırlıq / rənglər seçə bilərsiniz, seçmə işarələri üçün bir font seçin və bir əfsanəyə bir font seçin, hamısı bir-birindən asılı olmayaraq.


ƏLAVƏ OLUNUB:

Mən font lüğətlərini ləğv edən və sisteminizdə hər hansı bir yazı tipini, hətta font fontlarını istifadə etməyə imkan verən bir az daha fərqli, daha pis bir yanaşma inkişaf etdirdim. Hər bir şey üçün ayrı fontlar yaratmaq üçün, yalnız font_pathfont_prop kimi dəyişənlər yazmaq lazımdır.

 import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as font_manager import matplotlib.ticker # Workaround for Matplotlib 2.0.0 log axes bug https://github.com/matplotlib/matplotlib/issues/8017 : matplotlib.ticker._mathdefault = lambda x: '\\mathdefault{%s}'%x # Set the font properties (can use more variables for more fonts) font_path = 'C:\Windows\Fonts\AGaramondPro-Regular.otf' font_prop = font_manager.FontProperties(fname=font_path, size=14) ax = plt.subplot() # Defines ax variable by creating an empty plot # Define the data to be plotted x = np.linspace(0, 10) y = x + np.random.normal(x) plt.plot(x, y, 'b+', label='Data points') for label in (ax.get_xticklabels() + ax.get_yticklabels()): label.set_fontproperties(font_prop) label.set_fontsize(13) # Size here overrides font_prop plt.title("Exponentially decaying oscillations", fontproperties=font_prop, size=16, verticalalignment='bottom') # Size here overrides font_prop plt.xlabel("Time", fontproperties=font_prop) plt.ylabel("Amplitude", fontproperties=font_prop) plt.text(0, 0, "Misc text", fontproperties=font_prop) lgd = plt.legend(loc='lower right', prop=font_prop) # NB different 'prop' argument for legend lgd.set_title("Legend", prop=font_prop) plt.show() 

Ümid edirəm ki, bu, hərtərəfli cavabdır.

45
09 мая '14 в 22:08 2014-05-09 22:08 cavab binaryfunt verilir May 09 '14 at 22:08 2014-05-09 22:08

Mənim kimi bir deformasiya müdiri olsanız, bütün font ölçülərini açıq şəkildə ifadə edə bilərsiniz:

 import matplotlib.pyplot as plt SMALL_SIZE = 8 MEDIUM_SIZE = 10 BIGGER_SIZE = 12 plt.rc('font', size=SMALL_SIZE) # controls default text sizes plt.rc('axes', titlesize=SMALL_SIZE) # fontsize of the axes title plt.rc('axes', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels plt.rc('xtick', labelsize=SMALL_SIZE) # fontsize of the tick labels plt.rc('ytick', labelsize=SMALL_SIZE) # fontsize of the tick labels plt.rc('legend', fontsize=SMALL_SIZE) # legend fontsize plt.rc('figure', titlesize=BIGGER_SIZE) # fontsize of the figure title 

matplotlib rc metodunu zəng edən ölçüləri də təyin edə bilərsiniz:

 import matplotlib SMALL_SIZE = 8 matplotlib.rc('font', size=SMALL_SIZE) matplotlib.rc('axes', titlesize=SMALL_SIZE) # and so on ... 
45
19 сент. Pedro M Duarte tərəfindən verilmiş cavab 19 sentyabr 2016-09-19 08:39 '16 saat 08:39 'da 2016-09-19 08:39

Yazı tipi ölçüsünü dəyişdirmək üçün təəccüblü bir şəkildə işləyən tamamilə fərqli bir yanaşma:

Təsvir ölçüsünü dəyişdirin!

Mən bu kodu çox vaxt istifadə edirəm:

 import matplotlib.pyplot as plt import numpy as np [enter image description here][1]fig = plt.figure(figsize=(4,3)) ax = fig.add_subplot(111) x = np.linspace(0,6.28,21) ax.plot(x, np.sin(x), '-^', label="1 Hz") ax.set_title("Oscillator Output") ax.set_xlabel("Time (s)") ax.set_ylabel("Output (V)") ax.grid(True) ax.legend(loc=1) fig.savefig('Basic.png', dpi=300) 

Şəkillərin ölçüsü kiçik olsa, sahəyə nisbətən daha böyük yazı tiplidir. Bu da markerləri artırır. Qeyd Mən də dpi başına dpi və ya nöqtəni təyin etdim. Bu barədə AMA-nın Amerika Amerika Modelləşdirmə Müəllimlər Forumu forumundan öyrəndim. Məsələn: kodu yuxarıda göstərin

11
05 мая '16 в 21:39 2016-05-05 21:39 Cavab Prof Huster tərəfindən 05 May '16 saat 21:39 2016-05-05 21:39 tərəfindən verilir

Yuxarıdakılara əsasən:

 import matplotlib.pyplot as plt import matplotlib.font_manager as fm fontPath = "/usr/share/fonts/abc.ttf" font = fm.FontProperties(fname=fontPath, size=10) font2 = fm.FontProperties(fname=fontPath, size=24) fig = plt.figure(figsize=(32, 24)) fig.text(0.5, 0.93, "This is my Title", horizontalalignment='center', fontproperties=font2) plot = fig.add_subplot(1, 1, 1) plot.xaxis.get_label().set_fontproperties(font) plot.yaxis.get_label().set_fontproperties(font) plot.legend(loc='upper right', prop=font) for label in (plot.get_xticklabels() + plot.get_yticklabels()): label.set_fontproperties(font) 
4
19 нояб. Cavab nvd 19 noyabrda verilir. 2014-11-19 21:36 '14 da 21:36 2014-11-19 21:36

Professor Huster ilə razılaşıram ki, ən asan yol şəklinin ölçüsünü dəyişdirməkdir ki, bu da fontları fonda saxlamağa imkan verir. Eksik etiketləri azaldığından, şəkilləri PDF formatında saxladığımda bbox_inches seçimi ilə əlavə etdim.

 import matplotlib.pyplot as plt plt.figure(figsize=(4,3)) plt.savefig('Basic.pdf', bbox_inches='tight') 
0
18 авг. Jean-Marc Sparenberg tərəfindən verilən cavabı 18 Av. 2017-08-18 17:28 '17 də 17:28 'də 2017-08-18 17:28' də

tags ilə bağlı digər suallar və ya bir sual