Внешний вид графиков

В matplotlib можно изменять не только тип самого графика (линия или столбцы), но и регулировать внешний вид выбранного типа:

import matplotlib.pyplot as plt import numpy as np x_axis = range(1, 20) y_axis = [i * i for i in range(1, 20)] lines = plt.plot(x_axis, y_axis) # здесь начинается отличие от примера из предыдущей недели. Мы сохраняем результат выполнения метода plot в отдельную переменную plt.setp(lines, color='red', linewidth=2.0) # теперь, с помощью метода setp мы можем изменять форму линии. # В данном случае, цвет устанавливаем в красный, а ширину линии делаем равной 2-м plt.show()

Возможные параметры

Параметр	Значения	Смысл
alpha	0.0 ⇐ x ⇐1.0	прозрачность
antialiased	True, False	сглаживать или нет
color	red, blue, black и т.д.	цвет
linestyle	'-', '–', '-.', ':', 'steps', …	вид линии
linewidth	вещественное число	ширина линии
marker	'+', ',', '.', '1', '2', '3', '4'	вид меток
markeredgecolor	red, blue, black и т.д.	цвет границы меток
markeredgewidth	вещественное число	ширина границы меток
markerfacecolor	red, blue, black и т.д.	цвет внутренней части меток
markersize	вещественное число	размер меток

Размещение нескольких графиков

На одном рисунке можно разместить несколько графиков. Делается это с помощью метода add_subplot(r, c, num). Что означают аргументы: add_subplot делит область рисования на прямоугольную сетку размером , где это количество рядов, а - количество столбцов. это номер графика в сетке, нумерация идет с левого верхнего угла, слева направо и начинается с единицы. В качестве результата, add_subplot возвращает специальную структуру данных, которая представляет собой описание осей.

Рассмотрим так же описание рисунка, которое делается с помощью метода figure. Неявно описание рисунка и добавление графика присутствует всегда, просто если мы никак в коде программы не обращаемся к методам figure и sub_plot, то библиотека подставляет значение по-умолчанию: figure(1) и add_subplot(1, 1, 1)

Посмотрим на пример:

import matplotlib.pyplot as plt import numpy as np def f(t): return np.exp(-t) * np.cos(2*np.pi*t) t1 = np.arange(0.0, 5.0, 0.1) t2 = np.arange(0.0, 5.0, 0.02) fig = plt.figure(num=None, figsize=(8, 6), dpi=96, facecolor='w', edgecolor='k') # опишем явно рисунок. Без номера, размером 8 на 6 дюймов и разрешением # 96 точек на дюйм. Цвет фона будет белый, а цвет контура - черный ax1 = fig.add_subplot(2, 1, 1) # добавим первый график и его "оси" сохраним в структуре ax1. Будет создана сетка размером 2 ряда на 1 столбец в первую ячейку которой и будет помещен график line1 = ax1.plot(t2, f(t2)) # нарисуем в нужных осях первый график plt.setp(line1, color='blue', alpha=0.75) 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.show()

Подписи к графикам

Чтобы разобраться с подписями к данным и получить некоторые математические знания, нарисуем диаграмму распределения случайных чисел

import matplotlib.pyplot as plt import numpy as np mu, sigma = 100, 15 # зададим значения среднего и разброса x = mu + sigma * np.random.randn(10000) # новая функция для генерации случайных чисел: в качестве аргумента принимает требуемое количество случайных чисел, # а возвращает список из вещесвенных значений случайных чисел. Обратите внимание, что x в результате тоже будет списком из 10 тыс элементов, каждый из которых # представляет собой случайное число, умноженное на 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 ax1.hist(x, 50, normed=1, facecolor='g', alpha=0.75) # новая форма гистограммы, в виде равномерного массива значений ax1.set_xlabel('Значения') # подпись для оси Х ax1.set_ylabel('Вероятность') # подпись для оси Y ax1.set_title('Гистограмма распределения') # заголовок диаграммы ax1.text(60, .025, r'$\mu=100,\ \sigma=15$') # текст, добавленный в окрестности точки (60; 0,025). Значения задаются в координатах графика, а не пикселей на экране ax1.axis([40, 160, 0, 0.03]) # метод axis позволяет описать диапазоны значений для осей. В данном случае, на оси Х будут отображены значения от 40 до 160, # а на оси Y от 0 до 0,03 ax1.grid(True) # показывать ли координатную сетку plt.show()

Задание 15

Нарисовать в окне на двух разных графиках 10 стран с наибольшим количеством регионов и наибольшим количеством городов. Оси графиков подписать.

Задание 16

Пусть есть некоторая окружность радиуса , которая катится горизонтально и без проскальзываний. Возьмем точку , находящуюся на расстоянии от центра окружности. При движении окружности, точка будет описывать некоторую кривую. Параметрически ее можно задать следующими уравнениями: , . Кривые такого вида называются трохоидами. Задача: нарисовать траектории движения точки при , ,