Ссылка для кода

Великий специалист по данным — это не только хороший программист и прикладной математик, но и хороший рассказчик. Его/ее основная работа состоит в том, чтобы извлекать знания и идеи из огромного количества явно бессмысленных данных. Лучший способ объяснить и получить представление — это визуализация.

Визуализация данных для науки о данных и искусственного интеллекта — это то же, что геометрия для математики. Это отличный способ для новичков осознать мощь науки о данных и программирования на Python в целом.

В этом уроке мы научимся рисовать некоторые из наиболее широко используемых графиков, используя библиотеку matplot в python, и рассмотрим значение основных функций, используемых в коде.

Прежде чем мы начнем, давайте рассмотрим некоторые предварительные условия, такие как функции numpy, которые используются в нашем коде:

np.random.seed() принимает целочисленный аргумент и использует его в качестве начального значения для генерации случайных чисел.

np.random.normal() :
numpy.random.normal(loc=0.0, scale=1.0, size=None)

Нарисуйте случайные выборки из нормального (гауссовского) распределения.

Параметры loc : float или array_like чисел с плавающей запятой Среднее значение («центр») распределения.

scalefloat или array_like для чисел с плавающей запятой

Стандартное отклонение (разброс или «ширина») распределения. Должно быть неотрицательным.

sizeint или кортеж целых чисел, необязательно

Форма вывода. Если задана форма, например, (m, n, k), то берется m * n * k выборок. Если size равен None (по умолчанию), возвращается одно значение, если loc и scale являются скалярами. В противном случае отрисовываются образцы np.broadcast(loc, scale).size.

Возвращает

непрямой или скалярный

Нарисованные выборки из параметризованного нормального распределения.

np.linspace()
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

Возвращает равномерно распределенные числа за указанный интервал.

Возвращает число равноотстоящих выборок, рассчитанных по интервалу [начало, стоп].

Конечная точка интервала может быть дополнительно исключена.

Сначала мы собираемся импортировать необходимые библиотеки: (numpy и matplot lib)

Мы будем использовать pyplot, Text, Line2D, Axe3D, Rectangle и Polygon из соответствующих библиотек.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.text import Text
from matplotlib.lines import Line2D
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.patches import Rectangle, Polygon

Эта функция помогает в настройке параметра clip_path атрибута разброса plt(pyplot) , проще говоря, clip path позволяет указать конкретную область элемента для отображения.

plt.rcParams[‘figure.dpi’] = 100 #here we are setting the rc parameter
def clip_path(ax):
T1 = [(0,0),(0,1),(1,1)]
T2 = [(0,0),(1,0),(1,1)]
clip1 = Polygon(T1, closed=True, transform=ax.transAxes,
edgecolor=’None’, facecolor=’None’)
clip2 = Polygon(T2, closed=True, transform=ax.transAxes,
edgecolor=’None’, facecolor=’None’)
line = Line2D([0, 1], [0, 1], transform=ax.transAxes, linewidth=0.5,
color=”black”, clip_on=False, zorder=50)
ax.add_artist(line)
return clip1, clip2

Теперь мы увидим разные типы сюжетов:

1) Точечная диаграмма. Точечная диаграмма представляет собой диаграмму, на которой каждое значение в наборе данных представлено точкой.

def scatter(ax):
np.random.seed(123)
n = 500
X = np.random.normal(0, 0.5, n)
Y = np.random.normal(0, 0.5, n)
S = 25
clip1, clip2 = clip_path(ax)
ax.scatter(X, Y, S, clip_path=clip1,
linewidth=0.75, facecolor=”None”, edgecolor=”.25")
ax.scatter(X, Y, S, clip_path=clip1,
linewidth=0.00, facecolor=”white”, edgecolor=”None”)
ax.scatter(X, Y, S/2, clip_path=clip1,
linewidth=0.00, facecolor=”black”, edgecolor=”None”, alpha=0.5)
ax.scatter(X, Y, S, clip_path=clip2,
linewidth=0.75, facecolor=”None”, edgecolor=”.25")
ax.scatter(X, Y, S, clip_path=clip2,
linewidth=0.00, facecolor=”white”, edgecolor=”None”)
ax.scatter(X, Y, S/2, clip_path=clip2,
linewidth=0.00, facecolor=”red”, edgecolor=”None”, alpha=0.5)
ax.set_xlabel(“Scatter plot”)
We have generated 500 random tuples (x,y) to serve as data for plotting, we are using the scatter()

Функция:

Axes.scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated parameter>, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

x, y :число с плавающей запятой или массив, форма (n, )

Позиции данных.

S :число с плавающей запятой или массив, форма (n, ), необязательно

Размер маркера в пунктах**2. По умолчанию rcParams[‘lines.markersize’] ** 2.

C :подобный массиву или список цветов или цвет, необязательно

2) Линейный график:

def lineplot(ax):
ax.set_xlabel(“Line plot”)
clip1, clip2 = clip_path(ax)
X = np.linspace(-1,1,100)
Y = 0.25*np.cos(1+np.pi*X)
ax.plot(X, Y, color=”black”, linewidth=2, clip_path=clip1)
ax.fill_between(X, Y+0.25, Y-0.25, clip_path=clip1,
facecolor=”black”, edgecolor=”None”, alpha=0.15)
X = np.linspace(-1,1,100)
Y = 0.25*np.cos(1+np.pi*X)
ax.plot(X, Y, color=”red”, linewidth=2, clip_path=clip2)
ax.fill_between(X, Y+0.25, Y-0.25, clip_path=clip2,
facecolor=”red”, edgecolor=”None”, alpha=0.15)

Линейная диаграмма, линейный график, линейный график или кривая диаграмма — это тип диаграммы, которая отображает информацию в виде серии точек данных, называемых «маркерами», соединенных отрезками прямой линии.

Linespace создает n равноотстоящих точек между двумя заданными числами

seaborn.lineplot(*, x=None, y=None, hue=None, size=None, style=None, data=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, dashes=True, markers=None, style_order=None, units=None, estimator=’mean’, ci=95, n_boot=1000, seed=None, sort=True, err_style=’band’, err_kws=None, legend=’auto’, ax=None, **kwargs)

3) график колчана: начертите двухмерное поле стрелок.

def quiverplot(ax):
clip1, clip2 = clip_path(ax)
n = 10
X,Y = np.mgrid[0:n, 0:n]
X,Y = 2*X/(n-1)-1, 2*Y/(n-1)-1
T = np.arctan2(Y, X)
U, V = np.cos(T), np.sin(T)
ax.quiver(X, Y, 0.1*U, 0.1*V, scale=1, width=0.015, clip_path=clip1,
edgecolor=’black’, facecolor=’.9', linewidth=.5)
ax.quiver(X, Y, 0.1*U, 0.1*V, T-1, scale=1, width=0.015, clip_path=clip2,
edgecolor=’black’, linewidth=.5, cmap=”hot”)
ax.set_xlabel(“Quiver plot”)

колчан([X, Y], U, V, [C], **kw)

Где X, Y определяют расположение стрелок, U, V определяют направления стрелок, а C дополнительно устанавливает цвет.

matplotlib.pyplot.quiver(*args, data=None, **kw)

4) Контурный график:

Контурные графики (иногда называемые Уровнями Графиками) — это способ отображения трехмерной поверхности на двухмерной плоскости. Он отображает две переменные-предикторы X Y на оси Y и переменную отклика Z в виде контуров. Эти контуры иногда называют z-срезами или значениями изоответа.

def contourplot(ax):
clip1, clip2 = clip_path(ax)
def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 100
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)
Z = f(X,Y)
CF = ax.contourf(Z, 10, extent=[-1,+1,-1,+1], alpha=.5,
origin=”upper”, cmap=”gray”, zorder=-10)
for collection in CF.collections:
collection.set_clip_path(clip1)
CS = ax.contour(Z, 10, extent=[-1,+1,-1,+1],
colors=”black”, linewidths=.5, origin=”upper”)
for collection in CS.collections:
collection.set_clip_path(clip1)
CF = ax.contourf(Z, 10, extent=[-1,+1,-1,+1], alpha=.75,
origin=”upper”, cmap=”viridis”, zorder=-10)
for collection in CF.collections:
collection.set_clip_path(clip2)
CS = ax.contour(Z, 10, extent=[-1,+1,-1,+1],
colors=”white”, linewidths=.5, origin=”upper”)
for collection in CS.collections:
collection.set_clip_path(clip2)

5)Сюжет изображения:

def imageplot(ax):
def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 32
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)
Z = f(X,Y)
clip1, clip2 = clip_path(ax)
ax.imshow(Z, extent=[-1,+1,-1,+1], origin=”upper”, zorder=50,
cmap=”gray”, interpolation=”nearest”, clip_path=clip1)
ax.imshow(Z, extent=[-1,+1,-1,+1], origin=”upper”,
cmap=”hot”, interpolation=”bicubic”, clip_path=clip2)
ax.set_xlabel(“Image plot”)

6) круговая диаграмма:

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None)

Постройте круговую диаграмму.

Создайте круговую диаграмму массива x. Дробная площадь каждого клина определяется как x/sum(x). Если sum(x) ‹ 1, то значения x напрямую дают дробную площадь, и массив не будет нормализован. В полученном круге будет пустой клин размера 1 - сумма(х).

Клинья строятся против часовой стрелки, по умолчанию начиная с оси x.

def pieplot(ax):
clip1, clip2 = clip_path(ax)
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
cmap = plt.get_cmap(“gray”)
outer_colors = cmap(.1+np.arange(3)/4)
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10])/12)
patches, _ = ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
wedgeprops=dict(width=size, edgecolor=’w’))
for patch in patches:
patch.set_clip_on(True)
patch.set_clip_path(clip1)
patches, _ = ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,
wedgeprops=dict(width=size, edgecolor=’w’))
for patch in patches:
patch.set_clip_on(True)
patch.set_clip_path (clip1)
cmap = plt.get_cmap(“tab20c”)
outer_colors = cmap(+np.arange(3))
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
patches, _ = ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
wedgeprops=dict(width=size, edgecolor=’w’))
for patch in patches:
patch.set_clip_on(True)
patch.set_clip_path(clip2)
patches, _ = ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,
wedgeprops=dict(width=size, edgecolor=’w’))
for patch in patches:
patch.set_clip_on(True)
patch.set_clip_path (clip2)
rect = Rectangle((0,0), 1, 1, transform=ax.transAxes, linewidth=0.75,
edgecolor=”black”, facecolor=”None”, clip_on=False)
ax.add_artist(rect)
ax.set_xlabel(“Pie plot”)

7) Трехмерный график:

Отображает данные в трех измерениях, то есть каждая точка имеет координаты (x, y, z).

def threedplot(ax):
T1 = [(0,0),(0,1),(1,1)]
T2 = [(0,0),(1,0),(1,1)]
clip1 = Polygon(T1, closed=True, transform=ax.transAxes,
edgecolor=’None’, facecolor=’None’)
clip2 = Polygon(T2, closed=True, transform=ax.transAxes,
edgecolor=’None’, facecolor=’None’)
ax.set_axis_off()
ax.set_xlim(-1, 1), ax.set_ylim(-1, 1), ax.set_zlim(-2, 2)
X,Y= np.meshgrid(np.linspace(-1, 1, 25),
np.linspace(-1, 1, 25))
Z = np.sin(5*np.sqrt(X**2+Y**2))
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=”gray”, clip_path=clip1,
linewidth=.25, edgecolor=”black”, vmin=-1.5, vmax=1)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=”magma”, clip_path=clip2,
linewidth=0, edgecolor=”black”, vmin=-1.5, vmax=1)
line = Line2D([0, 1], [0, 1], transform=ax.transAxes, linewidth=0.5,
color=”black”, clip_on=False, zorder=10)
ax.add_artist(line)
rect = Rectangle((0,0), 1, 1, transform=ax.transAxes, linewidth=0.75,
edgecolor=”black”, facecolor=”None”, clip_on=False)
ax.add_artist(rect)
text = Text(0.5, -0.025, “3D plot”, clip_on=False,
ha=”center”, va=”top”, transform=ax.transAxes)
ax.add_artist(text)

8) гистограмма:

def barplot(ax):
clip1, clip2 = clip_path(ax)
n = 16
X = np.arange(n)
Y1 = (1–0.25*X/n) * np.random.uniform(0.25, 0.75, n)
Y2 = (1–0.25*X/n) * np.random.uniform(0.25, 0.75, n)
ax.bar(X, +Y1, 1, facecolor=’#cccccc’, edgecolor=’white’, clip_path=clip1)
ax.bar(X, -Y2, 1, facecolor=’#999999', edgecolor=’white’, clip_path=clip1)
ax.bar(X, +Y1, 1, facecolor=’#ffaaaa’, edgecolor=’white’, clip_path=clip2)
ax.bar(X, -Y2, 1, facecolor=’#ff7777', edgecolor=’white’, clip_path=clip2)
ax.set_xlim(-1,n)
ax.set_xlabel(“Bar plot”)

9) блочная диаграмма:

Коробчатая диаграмма (также известная как диаграмма с ячейками и усами) – это тип диаграммы, часто используемый в пояснительном анализе данных для визуального отображения распределения числовых данных и асимметрии путем отображения квартили данных (или процентили) и средние значения.

def boxplot(ax):
clip1, clip2 = clip_path(ax)
n = 5
data = np.random.normal(0, .25, (100,n))
bplots = ax.boxplot(data, patch_artist=True)
for patch in bplots[‘boxes’]:
patch.set_facecolor(“0.9”)
for line in bplots[‘medians’]:
line.set_color(“black”)
for element in [“boxes”,”medians”,”whiskers”, “caps”, “fliers”,”means”]:
for item in bplots[element]:
item.set_clip_path(clip1)
bplots = ax.boxplot(data, patch_artist=True)
for patch in bplots[‘boxes’]:
patch.set_facecolor(“0.9”)
for line in bplots[‘medians’]:
line.set_color(“black”)
for element in [“boxes”,”medians”,”whiskers”, “caps”, “fliers”,”means”]:
for item in bplots[element]:
item.set_color(“red”)
try:
item.set_markerfacecolor (“red”)
item.set_markeredgecolor (“red”)
except:
pass
item.set_clip_path(clip2)
ax.set_xlim(0,n+1), ax.set_xticks([])
ax.set_xlabel(“Box plot”)

Теперь давайте установим ось и фон и вызовем наши функции

fig, axes = plt.subplots(3, 3, figsize=(8, 8))
for ax in axes.ravel():
ax.set(xticks=[], yticks=[], xlim=[-1,1], ylim=[-1,1])
axes[2,2] = plt.subplot(339, projection=”3d”)
lineplot(axes[0,0])
scatter(axes[0,1])
barplot(axes[0,2])
imageplot(axes[1,0])
contourplot(axes[1,1])
boxplot(axes[1,2])
quiverplot(axes[2,0])
pieplot(axes[2,1])
threedplot(axes[2,2])

ВЫВОД: