Как изменить размер шрифта на графике matplotlib
Как изменить размер шрифта для всех элементов (тиков, меток, заголовков) на графике matplotlib?
Я знаю, как изменить размеры метки галочки, это делается с помощью:
import matplotlib
matplotlib.rc('xtick', labelsize=20)
matplotlib.rc('ytick', labelsize=20)
но как можно изменить все остальное?
9 ответов:
font = {'family' : 'normal', 'weight' : 'bold', 'size' : 22} matplotlib.rc('font', **font)
это устанавливает шрифт всех элементов в шрифт, указанный объектом kwargs,
font
.в качестве альтернативы, вы также можете использовать
rcParams
update
метод, предложенный в ответ:matplotlib.rcParams.update({'font.size': 22})
или
import matplotlib.pyplot as plt plt.rcParams.update({'font.size': 22})
вы можете найти полный список доступных свойств на настройка страницы matplotlib.
Если вы хотите изменить размер шрифта для конкретного участка, который уже был создан, попробуйте это:
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)
если вы урод управления, как я, вы можете явно установить все ваши размеры шрифта:
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
обратите внимание, что вы также можете установить размеры называя
rc
метод onmatplotlib
:import matplotlib SMALL_SIZE = 8 matplotlib.rc('font', size=SMALL_SIZE) matplotlib.rc('axes', titlesize=SMALL_SIZE) # and so on ...
обновление: см. нижнюю часть ответа для немного лучшего способа сделать это.
обновление #2: Я также выяснил, как изменить шрифты заголовка легенды.
обновление #3: есть ошибка в Matplotlib 2.0.0 это приводит к тому, что метки тиков для логарифмических осей возвращаются к шрифту по умолчанию. Должно быть исправлено в 2.0.1, но я включил обходной путь во 2-ю часть ответа.это ответ для тех, кто пытается измените все шрифты, в том числе для легенды, и для тех, кто пытается использовать разные шрифты и размеры для каждой вещи. Он не использует rc (который, похоже, не работает для меня). Это довольно громоздко, но я не мог справиться с любым другим методом лично. Он в основном сочетает ответ ryggyr здесь с другими ответами на SO.
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()
преимущество этого метода заключается в том, что, имея несколько словарей шрифтов, вы можете выбрать различные шрифты/размеры/вес/цвета для различные заголовки, выберите шрифт для меток галочек и выберите шрифт для легенды, все независимо.
обновление:
Я разработал немного другой, менее загроможденный подход, который устраняет словари шрифтов и позволяет использовать любой шрифт в вашей системе .шрифты otf. Чтобы иметь отдельные шрифты для каждой вещи, просто напишите больше
font_path
иfont_prop
как переменные.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()
надеюсь, это комплексный ответ
вот это совершенно разные подход, который работает удивительно хорошо, чтобы изменить размеры шрифта:
изменить цифра в размере!
Я обычно использую такой код:
import matplotlib.pyplot as plt import numpy as np 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)
The меньше вы делаете размер фигуры,больше шрифт относительно участка. Это также увеличивает масштаб маркеров. Примечание Я также установил
dpi
или точка на дюйм. Я узнал об этом из публикации AMTA (Американский учитель моделирования Америки) форум. Пример из кода выше:
на основе вышеизложенного:
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)
это расширение для Мариуса Ретегана ответ. Вы можете сделать отдельный файл JSON со всеми вашими изменениями и загрузить его с помощью rcParams.обновление. Изменения будут применяться только к текущему сценарию. Так что
import json from matplotlib import pyplot as plt, rcParams s = json.load(open("example_file.json") rcParams.update(s)
и сохраните этот ' example_file.JSON' в той же папке.
{ "lines.linewidth": 2.0, "axes.edgecolor": "#bcbcbc", "patch.linewidth": 0.5, "legend.fancybox": true, "axes.color_cycle": [ "#348ABD", "#A60628", "#7A68A6", "#467821", "#CF4457", "#188487", "#E24A33" ], "axes.facecolor": "#eeeeee", "axes.labelsize": "large", "axes.grid": true, "patch.edgecolor": "#eeeeee", "axes.titlesize": "x-large", "svg.fonttype": "path", "examples.directory": "" }
Я полностью согласен с проф Юстера, что самый простой способ, чтобы продолжить, чтобы изменить размер фигуры, который позволяет сохранить шрифты по умолчанию. Я просто должен был дополнить это опцией bbox_inches при сохранении фигуры в формате pdf, потому что метки оси были вырезаны.
import matplotlib.pyplot as plt plt.figure(figsize=(4,3)) plt.savefig('Basic.pdf', bbox_inches='tight')