import matplotlib as mpl
# Вывод на экран текущей версии библиотеки matplotlib
print ('Current version on matplotlib library is', mpl.__version__)
позволяет пользователю сосредоточиться на выборе готовых решений и настройке базовых параметров рисунка.
import matplotlib.pyplot as plt
Самым главным объектом в matplotlib является рисунок Figure (метод plt.figure()). Создать рисунок в matplotlib означает задать форму, размеры и свойства основы-холста (canvas), на котором будет создаваться будущий график.
Для вывода созданных рисунков на экран можно вызвать метод plt.show(). Будут показаны все рисунки (figures), которые были созданы.
# Нарисуем точку
fig = plt.figure() # Создание объекта Figure
plt.scatter(1.0, 1.0) # scatter - метод для нанесения маркера в точке (1.0, 1.0)
plt.show()
После вызова любой графической команды, то есть функции, которая создаёт какой-либо графический объект, например, plt.scatter() или plt.plot(), всегда существует хотя бы одна область для рисования (по умолчанию прямоугольной формы).
Контейнеры рисунка (Figure containers) - Figure - это контейнер самого высокого уровня. На нём располагаются все другие контейнеры и графические примитивы.
fig = plt.figure() # Создание объекта Figure
print (fig.axes) # Список текущих областей рисования пуст
print (type(fig)) # тип объекта Figure
plt.scatter(1.0, 1.0) # scatter - метод для нанесения маркера в точке (1.0, 1.0)
# После нанесения графического элемента в виде маркера
# список текущих областей состоит из одной области
print (fig.axes)
plt.show()
Контейнеры областей рисования (Axes containers)
Axes - очень важный контейнер, так как именно с ним чаще всего работает пользователь. Экземпляры Axes - это области, располагающиеся в контейнере Figure, для которых можно задавать координатную систему (декартовая или полярная). На нём располагаются все другие контейнеры, кроме Figure, и графические примитивы. Это области на рисунке, на которых располагаются графики и диаграммы, в которые вставляются изображения и т.д. Мультиоконные рисунки состоят из набора областей Axes.
# Области разного типа
fig = plt.figure()
# Добавление на рисунок прямоугольной (по умолчанию) области рисования
ax = fig.add_axes([0, 0, 1, 1])
print (type(ax))
plt.scatter(1.0, 1.0)
fig = plt.figure()
# Добавление на рисунок круговой области рисования
ax = fig.add_axes([0, 0, 1, 1], polar=True)
plt.scatter(0.0, 0.5)
plt.show()
# Простой график функции
import numpy as np
x = np.linspace(0, 5, 10) # 10 чисел от 0 до 5
y = x ** 2
plt.figure()
plt.plot(x, y, 'r')
plt.xlabel('x')
plt.ylabel('y')
plt.title('title')
plt.show()
# Надписи + Latex
fig, ax = plt.subplots()
ax.plot(x, x**2, label=r"$y = \alpha^2$")
ax.plot(x, x**3, label=r"$y = \alpha^3$")
ax.set_xlabel(r'$\alpha$', fontsize=18)
ax.set_ylabel(r'$y$', fontsize=18)
ax.set_title('plot')
ax.legend(loc=2); # 2 - положение легенды на графике
xs = np.linspace(0, 1, 20);
ys = np.sin(xs)
fig = plt.figure()
axes = fig.add_subplot(1,1,1)
axes.plot(xs, ys)
# This should be called after all axes have been added
fig.tight_layout()
#fig.savefig('test.png')
# Несколько графиков
# plt.subplots - это функция, которая возвращает кортеж, содержащий объект фигуры и осей
fig, axes = plt.subplots(nrows=1, ncols=2)
for ax in axes:
ax.plot(x, y, 'r')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('title')
fig.tight_layout()
# График для объектов Series и DataFrame модуля pandas
import pandas as pd
ts = pd.Series(np.random.randn(100), index=pd.date_range('1/1/2018', periods=100))
ts = ts.cumsum()
ts.plot()
plt.show()
# стиль линий и легенда
plt.figure()
ts.plot(style='k--', label='Series')
plt.legend()
plt.show()
# Для данных из DataFrame
df = pd.DataFrame(np.random.randn(10,4), columns=['A','B','C','D'])
#df = pd.DataFrame(np.random.randn(100, 4), index=ts.index, columns=list('ABCD'))
#df = df.cumsum();
plt.figure()
df.plot()
plt.legend(loc='best')
plt.show()
# Отключить легенду
df.plot(legend=False);
# График плотности распределения
ser = pd.Series(np.random.randn(1000))
ser.plot(kind='kde') # kde = Kernel Density Estimation plot = density
# поменяйте kde на hist
#ser.plot?
# метод pandas.DataFrame.hist вызывает метод matplotlib.pyplot.hist
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2018', periods=1000))
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
plt.figure();
df['B'].hist()
#df[['B']]
df['B'].plot(kind='hist')
df.hist()
df.plot(kind='hist')
# число интервалов для построения гистограммы bins=10
df['B'].hist(bins=10)
df['B'].hist(bins=50)
df = pd.DataFrame(np.random.rand(10,4), columns=['A','B','C','D']) # randn -> rand
df.plot(kind='bar');
df = pd.DataFrame(np.random.rand(10,4), columns=['A','B','C','D']) # randn -> rand
df['A'].plot(kind='bar'); # color='b' color="#888888"
# Пропорциональное распределение значений, параметр stacked=True
df.plot(kind='bar', stacked=True );
# Горизонтально kind='barh'
df.plot(kind='barh', stacked=True);
titanic = pd.read_csv('titanic.csv')
#print(titanic)
tclass = titanic.groupby(['pclass', 'survived']).size().unstack() # unstack собирает в единый DataFrame
tclass
tclass.plot(kind='bar', stacked=True );
# matplotlib.pyplot.pie
t = titanic.groupby(['pclass']).size()
print(t)
plt.subplot(aspect=True)
plt.pie(t, labels=t.index.values, autopct='%i%%')
plt.title("Passenger Class on the Titanic"); # ;!!!
explode = (0, 0.1, 0.2) # only "explode" the 2nd slice (i.e. 'Hogs')
plt.subplot()
plt.pie(t, explode=explode, labels=t.index.values, autopct='%i%%', shadow=True, startangle=90)
plt.axis('equal')
plt.title("Passenger Class on the Titanic");
Диаграмма рассеяния (также точечная диаграмма, англ. scatter plot) — математическая диаграмма, изображающая значения двух переменных в виде точек на декартовой плоскости.
На диаграмме рассеяния каждому наблюдению (или элементарной единице набора данных) соответствует точка, координаты которой (в декартовой системе координат) равны значениям двух каких-то параметров этого наблюдения. Если предполагается, что один из параметров зависит от другого, то обычно значения независимого параметра откладывается по горизонтальной оси, а значения зависимого — по вертикальной. Диаграммы рассеяния используются для демонстрации наличия или отсутствия корреляции между двумя переменными.
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y);
plt.scatter(x, 5*x);
plt.scatter(x, y*x);
plt.scatter(x, y/x);
plt.scatter(x, y*x, alpha=0.8, marker=r'$\clubsuit$');
plt.scatter(x, y, marker='^');
N=100
r0 = 0.6
area = (20 * np.random.rand(N))**2 # 0 to 10 point radii
c = np.sqrt(area)
r = np.sqrt(x * x + y * y)
area1 = np.ma.masked_where(r < r0, area)
area2 = np.ma.masked_where(r >= r0, area)
plt.scatter(x, y, s=area1, marker='^', c=c)
plt.scatter(x, y, s=area2, marker='o', c=c)
Тренд (от англ. trend — тенденция) — это долговременная тенденция изменения исследуемого временного ряда. Тренды могут быть описаны различными уравнениями — линейными, логарифмическими, степенными и так далее. Фактический тип тренда устанавливают на основе подбора его функциональной модели статистическими методами либо сглаживанием исходного временного ряда.
diamonds = pd.read_csv('diamonds.csv')
# the raw data
x = diamonds.carat[diamonds.carat < 2]
y = diamonds.price[diamonds.carat < 2]
plt.plot(x, y, 'o', alpha=0.05)
# 2nd order polynomial
params = np.polyfit(x, y, 2)
xp = np.linspace(x.min(), 2, 20)
yp = np.polyval(params, xp)
plt.plot(xp, yp, 'k')
#overplot an error band
sig = np.std(y - np.polyval(params, x))
plt.fill_between(xp, yp - sig, yp + sig, color='k', alpha=0.2)
plt.xlabel("Carat")
plt.ylabel("Price");
Bootstrap графики используются для того, чтобы показать, что в случайных выборках среднее значение, а также разброс значений бывает очень разным. Встроенные функции позволяют выбирать случайную выборку и отобразить различные статистики некоторое число раз.
data = pd.Series(np.random.rand(1000))
#plt.figure()
pd.plotting.bootstrap_plot(data, size=50, samples=500, color='grey')
#plt.show()