Автор: Шабанов Павел Александрович
E-mail: pa.shabanov@gmail.com
URL: Заметки по программированию в науках о Земле
Дата последнего обновления: 11.03.2017
# Преамбула
%matplotlib inline
import os
import matplotlib.pyplot as plt
import numpy as np
def save(name='', fmt='png'):
pwd = os.getcwd()
iPath = './pictures/{}'.format(fmt)
if not os.path.exists(iPath):
os.mkdir(iPath)
os.chdir(iPath)
plt.savefig('{}.{}'.format(name, fmt), fmt='png')
os.chdir(pwd)
#plt.close()
Графические команды;
Диаграммы;
Методы изолиний;
Методы заливки;
Векторные диаграммы.
Графические команды - это функции, которые, принимая некоторые параметры, возвращают какой-то графический результат. Это может быть текст, линия, график, диаграмма и др. В этой главе будут рассмотрены графические команды, которые создают графику высокого уровня: графики или диаграммы. Подробнее о конкретных типах графиков смотри в электронных ресурсах.
В Matplotlib заложены как простые графические команды, так и достаточно сложные. Доступ к ним через pyplot означает использование синтаксиса вида "plt.название_команды()
".
Наиболее распространённые команды для создания научной графики в matplotlib это:
I. Самые простые графические команды:
plt.scatter()
- маркер или точечное рисование;
plt.plot()
- ломаная линия;
plt.text()
- нанесение текста;
II. Диаграммы:
plt.bar()
, plt.barh()
, plt.barbs()
, broken_barh()
- столбчатая диаграмма;
plt.hist()
, plt.hist2d()
, plt.hlines
- гистограмма;
plt.pie()
- круговая диаграмма;
plt.boxplot()
- "ящик с усами" (boxwhisker);
plt.errorbar()
- оценка погрешности, "усы".
III. Изображения в изолиниях:
plt.contour()
- изолинии;
plt.contourf()
- изолинии с послойной окраской;
IV. Отображения:
plt.pcolor()
, plt.pcolormesh()
- псевдоцветное изображение матрицы (2D массива);
plt.imshow()
- вставка графики (пиксели + сглаживание);
plt.matshow()
- отображение данных в виде квадратов.
V. Заливка:
plt.fill()
- заливка многоугольника;
plt.fill_between()
, plt.fill_betweenx()
- заливка между двумя линиями;
VI. Векторные диаграммы:
plt.streamplot()
- линии тока;
plt.quiver()
- векторное поле.
Полный список команд, доступный для pyplot, можно узнать на официальном сайте matplotlib. В списке нет команд для рисования различных геометрических фигур (круги, многоугольники и т.д.). Это связано с тем, что в matplotlib они вызываются через matplotlib.patches, который за них отвечает. Создание геометрически сложных фигур является достаточно специальной задачей, поэтому matplotlib.patches здесь не будут рассматриваться.
Ознакомиться с примерами создания фигур с помощью matplotlib можно в электронных ресурсах к этой главе.
Ниже показаны примеры графики, которую matplotlib создаёт "по умолчанию" при вызове той или иной графической команды. В дальнейшем будет показано как задать ту или иную конфигурацию конкретного графика и как настроить сопутствующие рисунку элементы (подписи, линии вспомогательной сетки, шрифты и т.д.).
# Пример 2.1
import matplotlib.pyplot as plt
fig = plt.figure()
# Добавление на рисунок прямоугольной (по умолчанию) области рисования
scatter1 = plt.scatter(0.0, 1.0)
print('Scatter: ', type(scatter1))
graph1 = plt.plot([-1.0, 1.0], [0.0, 1.0])
print('Plot: ', len(graph1), graph1)
text1 = plt.text(0.5, 0.5, 'Text on figure')
print('Text: ', type(text1))
grid1 = plt.grid(True) # линии вспомогательной сетки
save(name='pic_2_1', fmt='pdf')
save(name='pic_2_1', fmt='png')
plt.show()
('Scatter: ', <class 'matplotlib.collections.PathCollection'>) ('Plot: ', 1, [<matplotlib.lines.Line2D object at 0x0000000009CD3C50>]) ('Text: ', <class 'matplotlib.text.Text'>)
# Пример 2.2
import matplotlib.pyplot as plt
import numpy as np
s = ['one','two','three ','four' ,'five']
x = [1, 2, 3, 4, 5]
z = np.random.random(100)
z1 = [10, 17, 24, 16, 22]
z2 = [12, 14, 21, 13, 17]
# bar()
fig = plt.figure()
plt.bar(x, z1)
plt.title('Simple bar chart')
plt.grid(True) # линии вспомогательной сетки
# hist()
fig = plt.figure()
plt.hist(z)
plt.title('Simple histogramm')
plt.grid(True)
# pie()
fig = plt.figure()
plt.pie(x, labels=s)
plt.title('Simple pie chart')
# boxplot()
fig = plt.figure()
plt.boxplot([z1, z2])
plt.title('Simple box whisker chart')
plt.grid(True)
# errorbar()
fig = plt.figure()
plt.errorbar(x, z1, xerr=1, yerr=0.5)
plt.title('Simple error bar chart')
plt.grid(True)
# смотри преамбулу
save(name='pic_2_2', fmt='pdf')
save(name='pic_2_2', fmt='png')
plt.show()
# Пример 2.3
import matplotlib.pyplot as plt
import numpy as np
dat = np.random.random(200).reshape(20,10) # создаём матрицу значений
fig = plt.figure()
pc = plt.pcolor(dat) # метод псевдографики pcolor
plt.colorbar(pc)
plt.title('Simple pcolor plot')
fig = plt.figure()
me = plt.imshow(dat)
plt.colorbar(me)
plt.title('Simple imshow plot')
save(name='pic_2_3', fmt='pdf')
save(name='pic_2_3', fmt='png')
plt.show()
# Пример 2.4
import matplotlib.pyplot as plt
import numpy as np
dat = np.random.random(200).reshape(20,10) # создаём матрицу значений
fig = plt.figure()
cr = plt.contour(dat)
plt.colorbar(cr)
plt.title('Simple contour plot')
fig = plt.figure()
cf = plt.contourf(dat)
plt.colorbar(cf)
plt.title('Simple contourf plot')
fig = plt.figure()
cf = plt.matshow(dat)
plt.colorbar(cf, shrink=0.7)
plt.title('Simple matshow plot')
save(name='pic_2_4', fmt='pdf')
save(name='pic_2_4', fmt='png')
plt.show()
<matplotlib.figure.Figure at 0x9201240>
# Пример 2.5
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 4*np.pi+0.1, 0.1)
y = np.sin(x)
z = np.sin(2*x)
x2 = np.arange(20)
y2 = -1.5*x2 + 2.33
z2 = 0.7*x2 - 8.5
# fill()
fig = plt.figure()
plt.fill(x, y, 'r') # метод псевдографики pcolor
plt.title('Simple fill')
plt.grid(True)
# fill_between()
fig = plt.figure()
plt.plot(x2, z2, color='pink', linewidth=4.0)
plt.plot(x2, y2, color='g', linewidth=4.0)
plt.fill_between(x2, y2, z2)
plt.title('Simple fill_between')
plt.grid(True)
# fill_betweenx()
fig = plt.figure()
plt.plot(z, x, color='pink', linewidth=4.0)
plt.plot(z, x-1.0, color='g', linewidth=4.0)
plt.fill_betweenx(z, x, x-1.0, color='cyan')
plt.title('Simple fill_betweenx')
plt.grid(True)
save(name='pic_2_5', fmt='pdf')
save(name='pic_2_5', fmt='png')
plt.show()
# Пример 2.6
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
u = np.sin(x)*np.cos(x)
v = np.cos(x)
uu, vv = np.meshgrid(u,v)
N = 100
x1 = np.random.random(N).reshape((10, 10))
y1 = np.random.random(N).reshape((10, 10))
# streamplot()
fig = plt.figure()
plt.streamplot(x, x, uu, vv)
plt.title('Simple stream plot')
plt.grid(True)
# quiver()
fig = plt.figure()
plt.quiver(x1, y1, color='green')
plt.title('Simple quiver plot')
plt.grid(True)
save(name='pic_2_6', fmt='pdf')
save(name='pic_2_6', fmt='png')
plt.show()
Автор: Шабанов Павел Александрович
E-mail: pa.shabanov@gmail.com
- [Глава 2 Основные графические команды](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P1 Chapter 2 Main graphical commands.ipynb)
[Глава 3 Работа с текстом и шрифтами](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P1 Chapter 3 Text and Fonts.ipynb)
[Глава 4 Цвет и цветовая палитра](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P1 Chapter 4 Color.ipynb)
Часть II Структура рисунка в matplotlib
[Глава 5 Рисунок](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 5 Figure container.ipynb)
[Глава 6 Область рисования](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 6 Axes container.ipynb)
[Глава 7 Мультиоконные рисунки](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 7 Subplots.ipynb)
[Глава 8 Координатные оси](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 8 Axis container.ipynb)
[Глава 9 Деления координатных осей](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 9 Ticks container.ipynb)
Часть III Специальные элементы рисунка в matplotlib
[Глава 10 Особенности координатных осей](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P3 Chapter 10 Twinx and log scale.ipynb)
[Глава 11 Графики в полярной системе координат](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P3 Chapter 11 Polar plots.ipynb)
[Глава 12 Легенда](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P3 Chapter 12 Legends.ipynb)
[Глава 13 Цветовая шкала](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P3 Chapter 13 Colorbar.ipynb)