#!/usr/bin/env python # coding: utf-8 # # Научная графика в Python # # Автор: Шабанов Павел Александрович # # E-mail: pa.shabanov@gmail.com # # URL: [Заметки по программированию в науках о Земле](http://progeoru.blogspot.ru/) # # Дата последнего обновления: 11.03.2017 # In[12]: # Преамбула get_ipython().run_line_magic('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() # ## Глава 2 Основные графические команды # # ### Содержание главы # # 1. Графические команды; # # 2. Диаграммы; # # 3. Методы изолиний; # # 4. Методы заливки; # # 5. Векторные диаграммы. # # Графические команды - это функции, которые, принимая некоторые параметры, возвращают какой-то графический результат. Это может быть текст, линия, график, диаграмма и др. В этой главе будут рассмотрены графические команды, которые создают графику высокого уровня: графики или диаграммы. Подробнее о конкретных типах графиков смотри в электронных ресурсах. # # ### Электронные ресурсы: # # + [Галерея примеров различной графики в matplotlib](http://matplotlib.org/gallery.html); # # + [Примеры создания геометрических фигур и форм](http://matplotlib.org/examples/shapes_and_collections/artist_reference.html). # # + [Полный список команд для pyplot](http://matplotlib.org/api/pyplot_summary.html) # ### 2.1 Графические команды # # В 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()` - векторное поле. # # [Полный список команд](http://matplotlib.org/api/pyplot_summary.html), доступный для pyplot, можно узнать на официальном сайте matplotlib. В списке нет команд для рисования различных геометрических фигур (круги, многоугольники и т.д.). Это связано с тем, что в matplotlib они вызываются через **matplotlib.patches**, который за них отвечает. Создание геометрически сложных фигур является достаточно специальной задачей, поэтому **matplotlib.patches** здесь не будут рассматриваться. # # Ознакомиться с примерами создания фигур с помощью matplotlib можно в электронных ресурсах к этой главе. # # Ниже показаны примеры графики, которую matplotlib создаёт "по умолчанию" при вызове той или иной графической команды. В дальнейшем будет показано как задать ту или иную конфигурацию конкретного графика и как настроить сопутствующие рисунку элементы (подписи, линии вспомогательной сетки, шрифты и т.д.). # In[13]: # Пример 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() # ### 2.2 Диаграммы # In[14]: # Пример 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 Методы изолиний # In[15]: # Пример 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 Методы отображений # In[16]: # Пример 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() # ### 2.5 Методы заливки # In[17]: # Пример 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 Векторные диаграммы # In[18]: # Пример 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 # # ## Научная графика в Python # # ### Оглавление # # + [Глава 1 Библиотека matplotlib. Pyplot](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P1 Chapter 1 Pyplot.ipynb) # # > + [Глава 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) # In[ ]: