мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
python:week14 [19/04/2017 04:04] – [Размещение нескольких графиков] ybezrukovpython:week14 [15/02/2018 12:44] (текущий) – [Задание 17] ybezrukov
Строка 4: Строка 4:
  
 <code python> <code python>
 +
 +import matplotlib.pyplot as plt
 +import numpy as np
 +
  
 x_axis = range(1, 20) x_axis = range(1, 20)
Строка 36: Строка 40:
 ====== Размещение нескольких графиков ====== ====== Размещение нескольких графиков ======
  
-В одном окне можно разместить несколько графиков. Делается это с помощью метода subplot(r, c, num). Что означают аргументы: subplot делит область рисования на прямоугольную сетку размером $r\times c$, где $r$ это количество рядов, а $c$ - количество столбцов. $num$ это номер графика в сетке, нумерация идет с левого верхнего угла, слева направо и начинается с единицы.+На одном рисунке можно разместить несколько графиков. Делается это с помощью метода add_subplot(r, c, num). Что означают аргументы: add_subplot делит область рисования на прямоугольную сетку размером $r\times c$, где $r$ это количество рядов, а $c$ - количество столбцов. $num$ это номер графика в сетке, нумерация идет с левого верхнего угла, слева направо и начинается с единицы. В качестве результата, add_subplot возвращает специальную структуру данных, которая представляет собой описание осей. 
 + 
 +Рассмотрим так же описание рисунка, которое делается с помощью метода figure. Неявно описание рисунка и добавление графика присутствует всегда, просто если мы никак в коде программы не обращаемся к методам figure и sub_plot, то библиотека подставляет значение по-умолчанию: figure(1) и add_subplot(1, 1, 1)
  
 Посмотрим на пример: Посмотрим на пример:
  
 <code python> <code python>
 +import matplotlib.pyplot as plt
 +import numpy as np
 +
 +
 def f(t): def f(t):
     return np.exp(-t) * np.cos(2*np.pi*t)     return np.exp(-t) * np.cos(2*np.pi*t)
Строка 47: Строка 57:
 t2 = np.arange(0.0, 5.0, 0.02) t2 = np.arange(0.0, 5.0, 0.02)
  
-plt.figure(1) # создаем область рисованияэто действие обычно выполняется по-умолчанию. +fig = plt.figure(num=None, figsize=(8, 6), dpi=96, facecolor='w', edgecolor='k') # опишем явно рисунок. Без номераразмером 8 на 6 дюймов и разрешением 
-plt.subplot(2,1,1) # в сетке размером 2 ряда на 1 столбец в первую ячейку разместим один график +# 96 точек на дюйм. Цвет фона будет белый, а цвет контура - черный 
-plt.plot(t2, f(t2)) # нарисуем гладкую линию +ax1 = fig.add_subplot(2, 1, 1) # добавим первый график и его "оси" сохраним в структуре ax1. Будет создана сетка размером 2 ряда на 1 столбец в первую ячейку которой и будет помещен график 
-plt.subplot(2, 1, 1) # добавим еще один график +line1 = ax1.plot(t2, f(t2)) # нарисуем в нужных осях первый график 
-marker_line = plt.plot(t1, f(t1)) # и нарисуем линию меток +plt.setp(line1, color='blue', alpha=0.75) 
-plt.setp(marker_line, marker='o', color='blue') # вот такого вида+ax2 = fig.add_subplot(2, 1, 1) # добавим еще один график туда же 
 +marker_line = ax2.plot(t1, f(t1)) # и нарисуем линию меток 
 +plt.setp(marker_line, marker='o', color='blue', linestyle='') # вот такого вида 
 + 
 + 
 +ax3 = fig.add_subplot(2, 1, 2) 
 +line2 = ax3.plot(t2, np.cos(2*np.pi*t2)) 
 +plt.setp(line2, color='green', linestyle='--')
  
-plt.subplot(2,1,2) # в сетке размером 2 ряда на 1 столбец во вторую ячейку разместим другой график 
-line2 = plt.plot(t2, np.cos(2*np.pi*t2)) 
-plt.setp(line2, color='green', linestyle='--') # а этот график нарисуем прерывистой линией зеленого цвета 
 plt.show() plt.show()
 +
  
 </code> </code>
Строка 66: Строка 81:
  
 <code python> <code python>
 +
 +import matplotlib.pyplot as plt
 +import numpy as np
 +
 mu, sigma = 100, 15 # зададим значения среднего и разброса mu, sigma = 100, 15 # зададим значения среднего и разброса
-x = mu + sigma * np.random.randn(10000) # новая функция для генерации случайных чисел: в качестве аргумента принимает требуемое количество случайных чисел, +x = mu + sigma * np.random.randn(10000) # новая функция для генерации случайных чисел: в качестве аргумента принимает требуемое количество случайных чисел,
 # а возвращает список из вещесвенных значений случайных чисел. Обратите внимание, что x в результате тоже будет списком из 10 тыс элементов, каждый из которых # а возвращает список из вещесвенных значений случайных чисел. Обратите внимание, что x в результате тоже будет списком из 10 тыс элементов, каждый из которых
-# представляет собой случайное число, умноженное на sigma и сдвинутое на mu +# представляет собой случайное число, умноженное на sigma и сдвинутое на mu
  
 +fig = plt.figure(num=None, figsize=(8, 6), dpi=96, facecolor='w', edgecolor='k')
 +
 +ax1 = fig.add_subplot(1, 1, 1)
 # the histogram of the data # the histogram of the data
-plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75) # новая форма гистограммы, в виде равномерного массива значений+ax1.hist(x, 50, normed=1, facecolor='g', alpha=0.75) # новая форма гистограммы, в виде равномерного массива значений
  
  
-plt.xlabel('Значения') # подпись для оси Х +ax1.set_xlabel('Значения') # подпись для оси Х 
-plt.ylabel('Вероятность') # подпись для оси Y +ax1.set_ylabel('Вероятность') # подпись для оси Y 
-plt.title('Гистограмма распределения') # заголовок диаграммы +ax1.set_title('Гистограмма распределения') # заголовок диаграммы 
-plt.text(60, .025, r'$\mu=100,\ \sigma=15$') # текст, добавленный в окрестности точки (60; 0,025). Значения задаются в координатах графика, а не пикселей на экране +ax1.text(60, .025, r'$\mu=100,\ \sigma=15$') # текст, добавленный в окрестности точки (60; 0,025). Значения задаются в координатах графика, а не пикселей на экране 
-plt.axis([40, 160, 0, 0.03]) # метод axis позволяет описать диапазоны значений для осей. В данном случае, на оси Х будут отображены значения от 40 до 160, +ax1.axis([40, 160, 0, 0.03]) # метод axis позволяет описать диапазоны значений для осей. В данном случае, на оси Х будут отображены значения от 40 до 160,
 # а на оси Y от 0 до 0,03 # а на оси Y от 0 до 0,03
-plt.grid(True) # показывать ли координатную сетку+ax1.grid(True) # показывать ли координатную сетку
 plt.show() plt.show()
  
 </code> </code>
 +
 +====== Задание 15 ======
 +
 +Нарисовать в окне на двух разных графиках 10 стран с наибольшим количеством регионов и наибольшим количеством городов. Оси графиков подписать.
 +
 +====== Задание 16 ======
 +
 +Пусть есть некоторая окружность радиуса $r$, которая катится горизонтально и без проскальзываний. Возьмем точку $M$, находящуюся на расстоянии $h$ от центра окружности. При движении окружности, точка будет описывать некоторую кривую. Параметрически ее можно задать следующими уравнениями: $x=rt-h\sin{t}$, $y=r-h\cos{t}$. Кривые такого вида называются трохоидами. Задача: нарисовать на одном рисунке три отдельных диаграммы с траекториями движения точки $М$ при $h>r$, $h<r$, $h=r$
 +
 +====== Задание 17 ======
 +
 +Фигуры Лиссажу описываются двумя уравнениями.
 +
 +$$\begin{array} [b]{l}
 +x(t)&=A \sin(at+d)\\
 +y(t)&=B \sin(bt)
 +\end{array}
 +$$
 +
 +$x(t)$ и $y(t)$ представляют собой гармонические колебания в перпендикулярных плоскостях, которые зависят от частот $a$ и $b$, а так же от фазы $d$. Если $A=B$ и $d=\frac{\pi}{2}$, то фигурой Лиссажу будет окружность. Если $b/a=2$ и $d=\frac{\pi}{2}$ - парабола. Задача: рассмотреть виды фигур Лиссажу при разных значениях параметров. 
 +