Python
Установлен ли пакет?
Что проверить, установлен ли интересующий пакет, попробуем импортировать его.
Пусть нас интересует пакет NumPy. Запустим интерпретатор python и выполним импорт в командной строке
>>> import numpy
Если NumPy не установлен, получим сообщение об ошибке
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named numpy
Если же NumPy не установлен, высветится приглашение ввести очередную строку
>>>
Numpy и Scipy
Необходимы для выполнения математических расчетов. Установка с помощью apt-get
sudo apt-get install python-numpy python-scipy
С помощью pip также можно установить, например, SciPy из Subversion:
pip install svn+http://svn.scipy.org/svn/scipy/trunk/#egg=scipy
А вот обычный способ установки с помощью pip -- с помощью Python Package Index, например
pip install scipy
в данном случае не сработает.
Matplotlib
Двух- и трехмерная научная графика. Предварительно должен быть установлен пакет NumPy. Мatplotlib требует NumPy версии >= 1.4. Проверим, что у нас стоит нужная версия
>>> import numpy
>>> print numpy.__version__
Наконец, когда нужная версия NumPy установлена, выполним
sudo apt-get install python-matplotlib
Настройка matplotlib
Рассмотрим, как настроить отображение нужных шрифтов в matplotlib на примере простенькой программы рисования параболы:
import matplotlib as mpl
import matplotlib.pyplot as p
p.plot([1,2,3,4], [1,4,9,16])
p.title('Парабола')
p.xlabel('Значения x')
p.ylabel('Квадраты значений x')
p.show()
Проблем здесь бывает две: 1) не отображаются кириллические символы; 2) по каким-то причинам пользователю требуется использовать другой тип шрифта (скажем, serif вместо sans-serif).
В первую очередь, для корректного отображения кириллических символов необходимо указать в программе, что соответствующая строка относится к типу unicode, т. е. заменить, строки вроде
p.title('Парабола')
на
p.title(u'Парабола')
иначе мы не получим ничего, кроме жалоб интерпретатора на попытки использовать в строке некорректный символ.
Однако, выполнив это, нет гарантии, что мы не получим квадратики вместо русских букв. Займёмся теперь настройкой шрифтов matplotlib.
Настройки matplotlib хранятся в конфигурационном файле matplotlibrc
. Однако вносить изменения непосредственно в этот файл нежелательно. Даже если на вашей машине нет других пользователей, остается риск потерять настройки при переустановке пакета. Поэтому лучше скопировать этот файл в каталог пользователя ~/.matplotlib
Где хранится matplotlibrc
? Ясно, что где-то среди конфигурационных файлов системы, но его расположение меняется от версии к версии. Поэтому проще всего его спросить у самого matplotlib. Запускаем интерпретатор и выполняем
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
Вот что у меня получилось:
'/etc/matplotlibrc'
Параметры пакета задаются в файле в виде пар свойство : значение, символ '#', как обычно в Python, обозначает комментарий. Свойство font.family определяет тип активного шрифта по умолчанию и может принимать пять значений: serif, sans-serif, cursive, fantasy, monospace.
В свою очередь свойства font.serif, font.sans-serif, font.cursive, font.fantasy, font.monospace содержат списки имен шрифтов (через запятую, в порядке уменьшения приоритета) соответствующих каждому типу:
font.family : sans-serif
...
font.size : 12.0
font.serif : Bitstream Vera Serif, New Century Schoolbook
font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana
font.cursive : Apple Chancery, Textile, Zapf Chancery
font.fantasy : Comic Sans MS, Chicago
font.monospace : Bitstream Vera Sans Mono, Andale Mono
Для "русификации" matplotlib необходимо поместить в эти списки имена доступных в системе шрифтов, содержащих кириллические символы. Например так:
font.serif : Verdana, Arial
font.sans-serif : Tahoma, Arial
font.cursive : Courier New, Arial
font.fantasy : Comic Sans MS, Arial
font.monospace : Arial
У меня русские буквы отобразились корректно при настройках по умолчанию:
однако шрифт sans-serif (без засечек) мне нужно было заменить на serif (с засечками), и, к тому же, увеличить размер шрифта до 14-ти пунктов. Правим значения font.family и font.size и получаем:
matplotlib можно настраивать и во время выполнения программы. Для этого в пакете определена структура matplotlib.rcParams, с которой работают как со словарем. Ключевые слова в данном случае -- имена свойств файла matplotlibrc.
Пример настройки шрифтов через matplotlib.rcParams (изменение семейства, которому относится активный шрифт):
import matplotlib as mpl
import matplotlib.pyplot as p
mpl.rcParams['font.family'] = 'fantasy'
p.plot([1,2,3,4], [1,4,9,16])
p.title(u'Парабола')
p.xlabel(u'Значения x')
p.ylabel(u'Квадраты значений x')
p.show()
matplotlib обрезает рисунок
Случается, что при сохранении в файл с помощью savefig
, matplotlib обрезает часть рисунка. Например, следующий рисунок обрезан по правой границе из-за чего испорчена подпись к оси
Это можно исправить, если задать прямоугольник (bounding box), в который помещается рисунок, прилегающим к границам рисунка снаружи с помощью параметра:
bbox_inches='tight'
Если и этого недостаточно, то, кроме того, можно добавить на сколько дюймов прямоугольник превосходит размеры tight с каждой стороны. Например,
pad_inches=1.5
превосходит "облегающий" прямоугольник на 1,5 дюйма.
Комментарии
comments powered by Disqus