<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF103%3A%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%E2%80%93_%D1%8D%D1%82%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%21</id>
		<title>LXF103:Диаграммы – это просто! - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF103%3A%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%E2%80%93_%D1%8D%D1%82%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%21"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF103:%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%E2%80%93_%D1%8D%D1%82%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE!&amp;action=history"/>
		<updated>2026-05-13T03:11:24Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF103:%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%E2%80%93_%D1%8D%D1%82%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE!&amp;diff=7641&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF103:%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%E2%80%93_%D1%8D%D1%82%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE!&amp;diff=7641&amp;oldid=prev"/>
				<updated>2009-04-17T07:10:31Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Matplotlib''' Графики и диаграммы – несколькими строчками переносимого кода!&lt;br /&gt;
&lt;br /&gt;
==Строим графопостроитель==&lt;br /&gt;
&lt;br /&gt;
: Не впечатлены возможностями ''R'' по части графиков, которые мы рассматривали в [[LXF102:R|LXF102]]? Нет проблем – напишите свою собственную программу, которая будет делать все, как надо. '''Олег Попов''' готов прийти вам на помощь.&lt;br /&gt;
&lt;br /&gt;
Речь в этой статье пойдет о ''Matplotlib'' – мультиплатформенном пакете для создания двумерных диаграмм на языке программирования ''Python''. С его помощью можно отрисовывать самые разнообразные диаграммы, причем объем кода, в большинстве случаев, не &lt;br /&gt;
превысит несколько десятков строк. Другая замечательная особенность &lt;br /&gt;
данного пакета – это способность встраивать диаграммы в различные &lt;br /&gt;
библиотеки графического интерфейса: ''Tk, wxWidgets, Qt'' и ''GTK+''.&lt;br /&gt;
&lt;br /&gt;
Итак, для сегодняшнего урока нам потребуются:&lt;br /&gt;
* Язык программирования ''Python''.&lt;br /&gt;
* Библиотека графического интерфейса ''GTK+''.&lt;br /&gt;
* Интерфейс к библиотеке ''GTK+'' для языка ''Python'' – ''PyGTK''.&lt;br /&gt;
* Библиотека для работы с многомерными массивами и численными методами ''NumPy'' (эта библиотека интенсивно используется ''Matplotlib'' для оптимизации обработки числовых данных).&lt;br /&gt;
* Собственно сам пакет ''Matplotlib''.&lt;br /&gt;
&lt;br /&gt;
Я не буду описывать магию установки программ во всех мыслимых &lt;br /&gt;
вариантах, но скажу, что для большинства дистрибутивов Linux (и для &lt;br /&gt;
ОС Windows) доступны скомпилированные пакеты, в том числе в виде&lt;br /&gt;
RPM, Deb и Fink. Если же вы пожелаете воспользоваться исходными текстами, нужно просто распаковать архив в какой-нибудь каталог, а затем&lt;br /&gt;
выполнить команды:&lt;br /&gt;
&lt;br /&gt;
 python setup.py build&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
&lt;br /&gt;
По умолчанию пакет устанавливается в каталог '''/usr/local/lib/python2.x/site-packages/Matplotlib/'''.&lt;br /&gt;
&lt;br /&gt;
В этом каталоге следует открыть файл '''font_manager.py''' и обратить &lt;br /&gt;
внимание на строки, указывающие на каталоги со шрифтами:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
 X11FontDirectories = [&lt;br /&gt;
   # an old standard installation point&lt;br /&gt;
   «/usr/X11R6/lib/X11/fonts/TTF/»,&lt;br /&gt;
   # here is the new standard location for fonts&lt;br /&gt;
   «/usr/share/fonts/»,&lt;br /&gt;
   # documented as a good place to install new fonts&lt;br /&gt;
   «/usr/local/share/fonts/»,&lt;br /&gt;
   # common application, not really useful&lt;br /&gt;
   «/usr/lib/openoffice/share/fonts/truetype/»,&lt;br /&gt;
   ]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Если в вашей системе кириллические шрифты находятся в других &lt;br /&gt;
каталогах, то очевидно, их нужно добавить в список. В противном случае ''Matplotlib'' возьмет нелокализованные шрифты из своего каталога, &lt;br /&gt;
и тогда уж не ждите корректоного отображения кириллицы.&lt;br /&gt;
&lt;br /&gt;
''Маtplotlib'' использует конфигурационный файл '''.Matplotlibrc''', который находится в каталоге '''/usr/local/share/Matplotlib/.Matplotlibrc''' (для&lt;br /&gt;
некоторых дистрибутивов Linux – '''/usr/share/Matplotlib/.Matplotlibrc''').&lt;br /&gt;
Опытным пользователям Linux должно быть очевидно, что можно&lt;br /&gt;
скопировать этот файл в свой домашний каталог (точнее, в каталог '''/home/[user]/Matplotlib/.Matplotlibrc''') и изменить желаемые настройки.&lt;br /&gt;
Очень рекомендуется сразу поправить имена шрифтов, используемых&lt;br /&gt;
по умолчанию, например, на стандартные шрифты '''TrueType/OpenType'''&lt;br /&gt;
от Microsoft или шрифты Postscript, содержащие русские символы. Я&lt;br /&gt;
установил следующие имена шрифтов:&lt;br /&gt;
&lt;br /&gt;
 font.serif              : Verdana&lt;br /&gt;
 font.sans-serif         : Arial,Verdana&lt;br /&gt;
 font.cursive            : Arial&lt;br /&gt;
 font.fantasy            : Comic Sans MS&lt;br /&gt;
 font.monospace          : Arial&lt;br /&gt;
&lt;br /&gt;
При использовании русского языка не возникает никаких проблем,&lt;br /&gt;
если сохранять исходные тексты программ в кодировке UTF-8. Для&lt;br /&gt;
этого в первых строках программы лучше явно указать кодировку с&lt;br /&gt;
мощью следующего заклинания:&lt;br /&gt;
&lt;br /&gt;
  #!/usr/bin/env python&lt;br /&gt;
  # -*- coding: UTF-8 -*-&lt;br /&gt;
&lt;br /&gt;
Для строк, содержащих русские символы, также следует указывать&lt;br /&gt;
кодировку явно:&lt;br /&gt;
&lt;br /&gt;
 unistring=u'Это строка в кодировке Unicode - UTF-8'&lt;br /&gt;
&lt;br /&gt;
===Рисуем график функции===&lt;br /&gt;
&lt;br /&gt;
Чтобы изобразить диаграмму средствами ''Matplotlib'', нужно создать&lt;br /&gt;
экземпляр класса '''Figure''', который служит контейнером для одного&lt;br /&gt;
или нескольких экземпляров класса '''Subplot'''. Класс '''Subplot''' является, в&lt;br /&gt;
свою очередь, контейнером для одной-единственной диаграммы.&lt;br /&gt;
&lt;br /&gt;
Конструктор класса '''Figure''' принимает следующие параметры:&lt;br /&gt;
* '''figsize = (width,height)''' – размер изображения в дюймах. Как показали эксперименты, этот параметр не влияет на размер диаграммы в окнах ''GTK+'', он влияет только на размер диаграммы при ее сохранении во внешний файл.&lt;br /&gt;
* '''dpi''' – количество точек на дюйм. Этот параметр задает размеры всех элементов диаграмм, включая масштаб шрифтов и линий. Для аккуратного отображения диаграмм на экране дисплея значения этого параметра можно варьировать от '''60''' до '''120'''. При разрешении монитора 1280х1024 приемлемое качество получится примерно при 75–85 dpi.&lt;br /&gt;
* '''facecolor''' – цвет фона для диаграмм.&lt;br /&gt;
&lt;br /&gt;
Область рисования диаграмм может быть обведена рамкой. Для этого можно задать следующие параметры:&lt;br /&gt;
* '''edgecolor = цвет рамки'''.&lt;br /&gt;
* '''linewidth = 1.0''', толщина линий рамки.&lt;br /&gt;
* '''frameon = True/False''' – рисовать/не рисовать рамку вокруг диаграмм.&lt;br /&gt;
&lt;br /&gt;
С помощью параметра '''subplotpars''' можно задать поля (свободное&lt;br /&gt;
место) вокруг диаграмм. Для этого существует класс '''SubplotParam''',&lt;br /&gt;
который создается следующим конструктором:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  params=SubplotParams(left=0.1, bottom=0.1, right=0.9, top=0.9,wspace=0.1,hspace=0.1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Параметры задаются в десятичных долях от общего размера области рисования. Параметры '''left, bottom, right''' и '''top''' задают соответственно положение левой, нижней, правой и верхней границ диаграммы.&lt;br /&gt;
Параметры '''wspace''' и '''hspace''' задают свободное место между диаграммами по вертикали и горизонтали и нужны только в том случае, если&lt;br /&gt;
'''Figure''' содержит более одной диаграммы.&lt;br /&gt;
&lt;br /&gt;
Пример создания экземпляра '''Figure''':&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  fig = Figure(figsize=(4,3), dpi=85,facecolor='white',edgecolor='lightblue',&lt;br /&gt;
  linewidth = 4.0, frameon = True,&lt;br /&gt;
  subplotpars=SubplotParams(left=0.1, bottom=0.1, right=0.9,&lt;br /&gt;
  top=0.9,wspace=0.1,hspace=0.1))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь можно добавить в '''fig''' контейнер для диаграммы&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  myplot = fig.add_subplot(1,1,1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Параметры метода '''add_subplot(numRows,numCols,plotNum)''' имеют&lt;br /&gt;
следующий смысл:&lt;br /&gt;
* '''numRows''' – количество диаграмм в строке.&lt;br /&gt;
* '''numCols''' – количество диаграмм в столбце. Диаграммы при этом нумеруются последовательно, слева направо, построчно, и для каждой диаграммы задается параметр '''plotNum''' – номер диаграммы по порядку.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  plot1=fig.add_subplot(2,2,3)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Так можно создать диаграмму, разделив область рисования на два столбца и две строки, и вывести ее в первом столбце второй строки.&lt;br /&gt;
&lt;br /&gt;
Или:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
 plot2=fig.add_subplot(2,2,2)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
что означает: создать диаграмму, разделив область рисования на два&lt;br /&gt;
столбца и две строки, и вывести диаграмму во втором столбце первой&lt;br /&gt;
строки.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF103_73_1.jpg|300px]]Осцилограмма затухающих колебаний, как сказали бы физики.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Давайте, к примеру, изобразим график функции ''y=sin(2*pi*x)*exp(-x)''&lt;br /&gt;
на интервале (0,5) с шагом 0.02 и отрисуем на нем красные окружности&lt;br /&gt;
(точки) с шагом 0.1. Сначала создадим экземпляр класса-контейнера&lt;br /&gt;
'''Figure''' и добавим в него экземпляр класса '''subplot''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  #рисуем график функции&lt;br /&gt;
  self.figure1 = Figure(figsize=(4,4), dpi=85,facecolor='lavender',&lt;br /&gt;
  edgecolor='lavenderblush',linewidth = 12.0,&lt;br /&gt;
  frameon = True,subplotpars=SubplotParams(left=0.1, bottom=0.1,&lt;br /&gt;
  right=0.9, top=0.9,wspace=0.1,hspace=0.1))&lt;br /&gt;
  self.subplot1=self.figure1.add_subplot(1,1,1)#&lt;br /&gt;
  self.subplot1.set_title(u' График функции y=sin(2*pi*x)*exp(-x)', fontsize=18)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Matplotlib''' интенсивно использует модуль '''NumPy''', который содержит библиотеку математических и служебных функций. Одной из них&lt;br /&gt;
является функция '''arange(start, stop, step)''', которая создает массив из&lt;br /&gt;
последовательности чисел в диапазоне '''(start, stop)''' c шагом '''step'''. Эта&lt;br /&gt;
функция часто используется для задания значений осей диаграммы.&lt;br /&gt;
Определим с ее помощью массивы значений для оси '''X'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  #массивы значений для оси X&lt;br /&gt;
  X1=arange(0.0,5.0,0.1)&lt;br /&gt;
  X2=arange(0.0,5.0,0.02)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Каждый охотник желает знать|Содержание=Несколько слов о том, как задается цвет. В пакете ''Matplotlib'' это можно сделать одним&lt;br /&gt;
из трех способов:&lt;br /&gt;
* '''1''' Однобуквенные аббревиатуры:&lt;br /&gt;
 '''b''' : blue&lt;br /&gt;
 '''g''' : green&lt;br /&gt;
 '''r''' : red&lt;br /&gt;
 '''c''' : cyan&lt;br /&gt;
 '''m''' : magenta&lt;br /&gt;
 '''y''' : yellow&lt;br /&gt;
 '''k''' : black&lt;br /&gt;
 '''w''' : white&lt;br /&gt;
* '''2''' В виде строки RGB в шестнадцатеричном представлении – '#rrggbb',например:&lt;br /&gt;
 mycolor= '#00008B'&lt;br /&gt;
* '''3''' Название цвета. Список используемых названий цветов можно увидеть в файле '''colors.py''' (см. исходные тексты).&lt;br /&gt;
|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
А вот и сама функция, которую нужно рисовать.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  #определим функцию для графика&lt;br /&gt;
  def f(t):&lt;br /&gt;
    s1 = sin(2*pi*t)&lt;br /&gt;
    e1 = exp(-t)&lt;br /&gt;
    return multiply(s1,e1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Отображение графика выполняет метод '''plot()''' класса '''Subplot''', который принимает множество параметров (в том числе цвет, толщину и&lt;br /&gt;
прозрачность линии и т.д.). Параметры эти детально описаны в документации. Кроме рисования линиями, можно рисовать специальными&lt;br /&gt;
символами-маркерами. В нашем примере график рисуется дважды:&lt;br /&gt;
первый раз изображается синяя линия, а второй раз – маркеры в виде&lt;br /&gt;
красных окружностей.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  #рисуем график функции сплошной синей линией&lt;br /&gt;
  line2=self.subplot1.plot(X2,f(X2),color='blue')&lt;br /&gt;
  #рисуем график функции для точек X1 маркерами (красными окружностями)&lt;br /&gt;
  line1=self.subplot1.plot(X1,f(X1),'ro')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
После того, как создан график, экземпляр класса '''Figure''' следует&lt;br /&gt;
упаковать внутрь стандартного виджета '''gtk.DrawingArea'''. Для этого&lt;br /&gt;
нужно создать экземпляр класса '''FigureCanvas''' и передать ему в качестве параметра экземпляр '''Figure''':&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  #scrolled window&lt;br /&gt;
  self.scrolledwindow1 = gtk.ScrolledWindow()&lt;br /&gt;
  self.scrolledwindow1.show ()&lt;br /&gt;
  self.vbox1.pack_start (self.scrolledwindow1, True,True, 0)&lt;br /&gt;
  self.scrolledwindow1.set_border_width ( 8)&lt;br /&gt;
  #&lt;br /&gt;
  self.canvas = FigureCanvas(self.figure1) # «упаковать» диграмму внутрь gtk.DrawingArea&lt;br /&gt;
  self.canvas.set_size_request(700,500) # минимальнй размер области рисования&lt;br /&gt;
  self.scrolledwindow1.add_with_viewport(self.canvas)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Поведение диаграммы в '''Matplotlib''' достаточно умное: можно увеличивать и уменьшать масштаб, можно экспортировать диаграмму&lt;br /&gt;
во внешний файл (поддерживаются форматы '''PNG, JPEG''' и '''Postscript''').&lt;br /&gt;
Для более наглядной манипуляции с диаграммами, есть специальный управляющий виджет – '''NavigationToolbar''', который также можно&lt;br /&gt;
использовать как виджет ''GTK+.''&lt;br /&gt;
&lt;br /&gt;
===Столбцовые и круговые диаграммы===&lt;br /&gt;
&lt;br /&gt;
Наиболее распространенными видами диаграмм являются столбцовые&lt;br /&gt;
и круговые, и пакет ''Matplotlib'' успешно справляется с их построением.&lt;br /&gt;
В следующем примере я попытаюсь показать, как строить несколько&lt;br /&gt;
диаграмм разного вида внутри контейнера '''Figure'''.&lt;br /&gt;
&lt;br /&gt;
На сайте Департамента Энергетики США (http://www.eia.doe.gov/ipm/)&lt;br /&gt;
можно найти разнообразную статистику по мировой добыче нефти и&lt;br /&gt;
газа. Попробуем оценить долю РФ в мировых запасах нефти и долю,&lt;br /&gt;
занимаемую РФ в мировой добыче.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF103_72_1.jpg|300px]] Да, на этом долго не протянешь... |Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Для начала давайте построим столбцовую диаграмму «Мировые&lt;br /&gt;
запасы нефти на 1 января 2006 года». Опишем исходные данные в виде&lt;br /&gt;
списка:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  OilReservesbyCountry=(('Saudi Arabia',264.3),('Canada',178.8),('Iran',132.5),('Iraq',115.0),&lt;br /&gt;
  'Kuwait',101.5),('UAE',97.8),('Venezuela',79.7),('Russia',60.0), ('Libya',39.1),&lt;br /&gt;
  ('Nigeria',35.9), ('United States',21.4),('China',18.3),('Qatar',15.2),&lt;br /&gt;
  ('Mexico',12.9),('Algeria',11.4),('Brazil',11.2), ('Kazakhstan',9.0),&lt;br /&gt;
  ('Norway',7.7),('Azerbaijan',7.0),&lt;br /&gt;
  ('India',5.8),('Rest of World',68.1))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Его элементами является список пар вида (страна, запасы нефти).&lt;br /&gt;
Для выборки данных из таких структур язык программирования ''Python''&lt;br /&gt;
имеет специальный синтаксис. Так, для получения списка стран можно&lt;br /&gt;
использовать следующую конструкцию:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  labels=[x[0] for x in OilReservesbyCountry]#Получаем список стран&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Совершенно аналогично можно выбрать и второй элемент (запасы нефти):&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  dataY1=[x[1] for x in OilReservesbyCountry]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Для рисования диаграммы будем использовать следующие цвета:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  #цвета&lt;br /&gt;
  cl_background='#E8D6BB'#фон&lt;br /&gt;
  cl_grid='#330000'#линии сетки&lt;br /&gt;
  cl_bars=('#330000','#660000','#993300','#996600','#CC6600','#CC6666','#CC9900',&lt;br /&gt;
  '#CC9966','#CCCC99','#CCCC00','#C9A24B','#94AB27','#8A8B75','#8A725E','#A080A4',&lt;br /&gt;
  '#9C8BBF','#969CE7', '#976CD1','#983BBA','#A92998','#AAAA9A','#EFBEAA','#CCCC66')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Cобственно отрисовку диаграммы вынесем в метод класса '''drawbarchart''':&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  def draw_barchart(self,NumChart,Title,DataSource,YLabel):&lt;br /&gt;
  '''метод создает столбцовую диаграмму&lt;br /&gt;
       параметры :&lt;br /&gt;
       numChart- номер диаграммы&lt;br /&gt;
       Title- заголовок&lt;br /&gt;
       DataSource- исходные данные&lt;br /&gt;
      YLabel-метка для оси Y&lt;br /&gt;
  '''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь можно создать экземпляр класса '''subplot''':&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  self.subplot=self.figure1.add_subplot(2,2,NumChart,axisbg=cl_background)#&lt;br /&gt;
  self.figure1.subplots_adjust(left=0.1,bottom=0.05,hspace=0.9)&lt;br /&gt;
  self.subplot.set_title(Title,fontsize=14)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Далее нужно подготовить исходные данные для диаграммы и вызывать метод '''bar''' класса '''subplot''', который, собственно, и рисует столбцовую диаграмму. Параметр '''width''' задает процент заполнения столбцом&lt;br /&gt;
отведенного ему прямоугольника по ширине. В нашем примере каждый&lt;br /&gt;
столбец будет занимать 75 % от максимально возможной ширины:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  #массивы значений для оси X&lt;br /&gt;
  X=arange(len(DataSource))&lt;br /&gt;
  dataY=[x[1] for x in DataSource ]&lt;br /&gt;
  width = 0.75&lt;br /&gt;
  barchart= self.subplot1.bar(X1, dataY1, width)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь осталось только настроить диграмму:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  self.subplot.set_axisbelow(True)#координатную сетку на задний план&lt;br /&gt;
  self.subplot.grid(True)# координатную сетку рисовать&lt;br /&gt;
  self.subplot.set_xlim(-1,len(X)+1)# Максимальные и минимальные значения по оси X&lt;br /&gt;
  labels=[x[0] for x in DataSource] # Список меток оси х&lt;br /&gt;
  self.subplot.set_xticks(X+width/2.,) # Местополжение меток строго по центру столбца&lt;br /&gt;
  self.subplot.set_xticklabels(labels,rotation=90) # установить метки для оси X, повернуть их на 90 градусов&lt;br /&gt;
  self.subplot.set_ylabel(YLabel) # название оси Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Для каждого столбца диаграммы мы устанавливаем цвет из списка '''cl_bars''':&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  indcolor=0&lt;br /&gt;
  for bar in barchart: #&lt;br /&gt;
     bar.set_facecolor(cl_bars[indcolor])&lt;br /&gt;
     indcolor=indcolor+1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Круговая диаграмма создается тремя строчками кода с вызовом метода pie класса '''Subplot'''. Параметры этого метода, на мой взгляд,&lt;br /&gt;
самоочевидны.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  self.subplot3=self.figure1.add_subplot(2,2,3)#&lt;br /&gt;
  self.subplot3.set_title(u'Доля России в мировых запасах',fontsize=14)&lt;br /&gt;
  self.subplot3.pie(RussiaPartOilReserves,labels=(u'Россия',u'прочие\n страны '),&lt;br /&gt;
  autopct = '%1.1f%%',explode=(0.2,0.2),colors=('#C9A24B','#CCCC99'), shadow=True)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вид нашей тестовой программы приведен на рисунке. Как можно&lt;br /&gt;
видеть, Россия имеет не такую уж значительную долю в мировых запасах нефти, при этом добывается огромное количество сырья на экспорт. Это означает, что наше правительство должно проводить политику сокращения добычи экспортной нефти и использовать текущие&lt;br /&gt;
доходы для развития других экспортных (несырьевых) возможностей нашей страны.&lt;br /&gt;
&lt;br /&gt;
===Настройка диаграммы===&lt;br /&gt;
&lt;br /&gt;
В предыдущих примерах мы задавали параметры оформления диаграмм (такие как цвет линий и фона, шрифты и т.д.) с помощью вызова методов различных классов. Тем самым мы неявно переопределяли параметры, заданные в '''.Matplotlibrc'''. Но есть и другой путь: переопределить нужные значения конфигурационного файла '''Matplotlibrc''' всего&lt;br /&gt;
один раз. Это намного удобнее, чем задавать многочисленные настройки с помощью параметров различных методов классов, и позволяет&lt;br /&gt;
сократить код в том случае, если приходится создавать несколько диаграммами и хочется иметь одинаковый внешний вид.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи оказывается на редкость простым. Нужно всего-навсего импортировать из модуля ''Matplotlib'' функцию с именем '''rc''':&lt;br /&gt;
&lt;br /&gt;
 from matplotlib import rc&lt;br /&gt;
&lt;br /&gt;
Эта магическая функция позволяет переопределить любые параметры '''Matplotlibrc''' в простой и наглядной форме:&lt;br /&gt;
&lt;br /&gt;
 rc('xtick', labelsize=12,color='white',direction='out') # x tick labels&lt;br /&gt;
 rc('lines', lw=0.5, color='#FFCF00') # thicker black lines&lt;br /&gt;
 rc('grid', c='#FFCF00', lw=0.5) # solid gray grid lines&lt;br /&gt;
 rc('text', color='#FFCF00')&lt;br /&gt;
 rc('axes', labelcolor='#FFCF00') # axes сolor&lt;br /&gt;
 rc('xtick', color='#FFCF00') # color of the tick labels&lt;br /&gt;
 rc('ytick', color='#FFCF00') # color of the tick labels&lt;br /&gt;
&lt;br /&gt;
===И напоследок...===&lt;br /&gt;
&lt;br /&gt;
''Matplotlib'' имеет множество функций, не описанных в данной статье. На сайте разработчиков можно найти многочисленные примеры&lt;br /&gt;
практического использования пакета для визуализации самых разнообразных данных. Все, чем мы пользовались в наших примерах – язык&lt;br /&gt;
программирования ''Python, GTK+, PyGTK'' и ''Matplotlib'' – распространяется под свободными лицензиями.&lt;br /&gt;
&lt;br /&gt;
И, наконец, в качестве бонуса для самых любознательных отмечу,&lt;br /&gt;
что все примеры из данной статьи (как и подавляющее количество примеров, распространяемых вместе с библиотекой) без каких-либо модификаций работают в Microsoft Windows XP/2000/2003, а все необходимые для этого ингредиенты можно найти в откомпилированном виде.&lt;br /&gt;
Переносимость, особенно задаром – это плюс, не так ли? '''LXF'''&lt;br /&gt;
&lt;br /&gt;
=== Полезные ссылки===&lt;br /&gt;
* http://www.python.org – официальный сайт ''Python''. Здесь вы можете найти документацию и самую важную информацию об этом замечательном языке программирования.&lt;br /&gt;
* http://www.pygtk.org – интерфейс к ''GTK+'' для языка программирования ''Python''. Особую ценность представляет FAQ по использованию ''PyGTK''.&lt;br /&gt;
* http://numpy.scipy.org/ – библиотека численных методов ''NumPу. Matplotlib'' использует эту библиотеку и без нее не работает.&lt;br /&gt;
* http://Matplotlib.sourceforge.net/ – сайт библиотеки ''Matplotlib'': документация, примеры и FAQ.&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>