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

Теперь давайте узнаем больше о Matplotlib.

Содержание
1. Введение в Matplotlib
2. Как установить?
3. Как импортировать?
4. Понимание основ Graph / Plots с использованием Matplotlib
5 .Важные графики, используемые в машинном обучении
6. Трехмерное построение с помощью Matplotlib

1. Введение в Matplotlib
Matplotlib - это библиотека для построения графиков с открытым исходным кодом на Python, представленная в 2003 году. Это очень обширная библиотека, разработанная таким образом, что большинство функций для построения графиков в MATLAB можно использовать в Python.

Он состоит из нескольких графиков, таких как линейный график, гистограмма, точечная диаграмма, гистограмма и т. Д., С помощью которых мы можем визуализировать различные типы данных.

2. Как установить?

#Windows, Linus, MacOS users can install this library using the following command:
python -mpip install -U matplotlib
#To install Matplotlib in Jupyter Notebook run the following command:
pip install matplotlib
#To install Matplotlib in Anaconda Prompt use the following command:
conda install matplotlib

3. Как импортировать?

#importing pyplot module from matplotlib
from matplotlib import pyplot as plt
#or 
import matplotlib.pyplot as plt

4. Основные сведения о Graph / Plots с помощью Matplotlib

a) Рисунок:
Это ограниченное пространство, в котором можно построить один или несколько графиков, или, другими словами, оно содержит одну или несколько осей (графиков).

Чтобы создать новую фигуру:

matplotlib.pyplot.figure (figsize = None, dpi = None, facecolor = None , edgecolor = None)

Создание новой фигуры:

import matplotlib.pyplot as plt
fig=plt.figure(figsize=[6.4, 4.8],facecolor='skyblue', edgecolor='black',dpi=360)
#If you run this code you will get this output
output:<Figure size 768x576 with 0 Axes>
#this means a new figure is created whose size is 768x576

б) Оси:
Рисунок обычно содержит более одной оси (графиков) и может содержать две или три в случае трехмерной структуры или объектов. У каждой оси есть заголовок, метка X и метка Y.

Чтобы добавить оси к текущей фигуре:

matplotlib.pyplot.axes (arg = None, projection = None, xlabel = None, ylabel = None, title = None)

Пример:

#adding axes to the above figure:
import matplotlib.pyplot as plt
fig=plt.figure(figsize=[6.4, 4.8],facecolor='skyblue', edgecolor='black',dpi=100)
#adding axes to fig
ax = fig.add_axes([0,0,1,1], projection='rectilinear',xlabel='X-label',ylabel='Y-label',title='Creating new Figure & Axes')

выход:

c) Ось:
Это фиксированная контрольная линия для измерения координат.

Чтобы добавить ось, используйте matploylib.pyplot.axis (* args, ** kwargs)

параметр : min, xmax, ymin, ymax: float, необязательно

Пределы оси должны быть установлены. Ограничения не должны быть указаны полностью или полностью.

ax.set(xlim=(xmin, xmax), ylim=(ymin, ymax))

d) Метка:
Используется для присвоения имен осям x и y или заголовка графика / графика. Он также используется для представления ребер и / или вершин графа целыми числами или именами.

Чтобы назначить метки, используйте следующие функции:
для осей x и y

matplotlib.pyplot.xlabel (xlabel, fontdict = None, labelpad = None)

matplotlib.pyplot.ylabel (y label, fontdict = None, labelpad = None)

e) X-тик и Y-тик:
Тиканья - это маркеры, которые помогают обозначать точки данных на осях.

i) Пометка точек данных галочками с помощью set_xticks ()

#marking the data points at the given positions with ticks.
ax.set_xticks([2,4,6,8,10])
ax.set_yticks([1,2,3,4,5,6,7,8,9,10])

ii) Маркировка отмеченных отметок с помощью set_xticklabels () и set_yticklabels ()

#labelling the marked ticks using set_xticklabels() and set_yticklabels() functions
ax.set_xticks([2,4,6,8,10])
ax.set_xticklabels(['Day2','Day4','Day6','Day8','Day10'])
ax.set_yticks([1,2,3,4,5,6,7,8,9,10])
ax.set_yticklabels(['Label1','Label2','Label3','Label4','Label5','Label6','Label7','Label8','Label9','Label10'])

f) Легенда:
Легенды - это удобный способ обозначить ряды данных, нанесенных на график. Это помогает читателям понять нанесенные данные.

Чтобы добавить легенды, используйте эту функцию:

matplotlib.pyplot.legend ( ['label1', 'label2'], facecolor = None, loc = 'upper center', shadow = True, edgecolor = None, title = None) )

Чтобы найти строку в разных местах графика, используйте loc = '- -'
лучший
верхний правый
верхний левый
нижний левый
нижний правый
правый < br /> в центре слева
в центре справа
в центре внизу
в центре вверху
в центре

Разберемся простым сюжетом

import matplotlib.pyplot as  plt
import numpy as np
import math
fig=plt.figure(figsize=[6.4, 4.8],facecolor='skyblue', edgecolor='black',dpi=100)
ax = fig.add_axes([0,0,1,1], projection='rectilinear',xlabel='angle',ylabel='values',title='sine wave',facecolor='w')
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
y1=np.cos(x)
plt.plot(x,y,color='black')
plt.plot(x,y1,color='r')
plt.legend(['sine-wave','cosine-wave'],facecolor='w',loc='upper center',shadow=True,edgecolor='black',title='Example')

g) Линии сетки:

Линии сетки - это линии, пересекающие график и отображающие деление оси. Эти линии помогают зрителям диаграммы увидеть, какое значение представлено точкой данных без метки. Линии сетки бывают двух типов: основные и второстепенные.

Чтобы добавить линии сетки на любой график, используйте эту функцию:

matplotlib.pyplot.grid (b = Нет, which = 'major', axis = 'both', ** kwargs)

Пример добавления линий сетки на рисунке выше

ax.grid(b=True,color='grey',linestyle='-', linewidth=1, which='both', axis='both')

h) Некоторые важные функции
i) matplotlib.pyplot.show()- Эта функция используется для отображения рисунка.
ii) matplotlib.pyplot.savefig()-Эта функция используется для сохранения любого рисунка.
iii) matplotlib.pyplot.title() -Эта функция используется для установки заголовка осей на любом рисунке.
iv) matplotlib.pyplot.annotate()-Эта функция помогает добавить любой комментарий, текст или любые стрелки / метки на рисунке.

5. Важные графики, используемые в машинном обучении
Есть много графиков matplotlib, которые используются в машинном обучении для анализа и визуализации. Следующие графики широко используются в машинном обучении.

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

Его можно построить с помощью функции matplotlib.pyplot.plot ().

matplotlib.pyplot.plot (x, y, scalex = True, scaley = True, данные = Нет, color = Нет)

i) Простой линейный график

#importing library
import matplotlib.pyplot as plt
#data-points or markers
values = [1, 5, 8, 9, 7, 11, 8, 12, 14, 9]
plt.plot(values,color='red',alpha=0.6)
plt.savefig('plot14.png', dpi=300, bbox_inches='tight')
plt.show()

Пример-1

#importing library
import matplotlib.pyplot as plt
#data-points or markers
sales1 = [1, 5, 8, 9, 7, 11, 8, 12, 14, 9, 5]
sales2 = [3, 7, 9, 6, 4, 5, 14, 7, 6, 16, 12]
#plotting line plots
line_chart1 = plt.plot(range(1,12), sales1,color='black')
line_chart2 = plt.plot(range(1,12), sales2,color='r',alpha=0.6)
#creating  points 
plt.plot(range(1,12), sales2,'C0o', alpha=0.5,color='black')
plt.plot(range(1,12), sales1,'C0o', alpha=0.5,color='orange')
#creating title,Y-label,X-label & legend
plt.title('Monthly sales of 2018 and 2019')
plt.ylabel('Sales')
plt.xlabel('Month')
plt.legend(['year 2018', 'year 2019'], loc=4)
#saving figure to my device in .png format
plt.savefig('plot15.png', dpi=300, bbox_inches='tight')
plt.show()

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

Пример -2: График простой синусоидальной волны

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = plt.axes()
ax.grid(color='black', linestyle='-', linewidth=2,alpha=0.1)
#creating numeric sequence with evenly spaced
x = np.linspace(0, 10, 1000)
plt.plot(x, np.sin(x - 0), color='black',alpha=0.8,label='sin x')        
plt.plot(x, np.sin(x - 1), color='orange',label='sin(x-1)')           
plt.plot(x, np.sin(x - 2),color='r' ,label='sin(x-2)')   
plt.plot(x, np.sin(x - 3), color='pink',label='sin(x-3)')     

plt.legend(loc='best')

plt.show()

b) График с площадью:
Он основан на линейном графике и отображает количественные данные в графическом виде. Область между осью и линией обычно выделяется цветом, текстурой или штриховкой. Это помогает сравнить две или несколько величин на одном графике.

График площади можно построить с помощью функции matplotlib.pyplot.plot (). Давайте разберемся на нескольких примерах.

Пример-1

#importing libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
turnover = [12, 17, 14, 15, 20, 27, 30, 38, 35, 30,28,15]
plt.fill_between(np.arange(12), turnover,
                 color="skyblue", alpha=0.5)
plt.plot(np.arange(12), turnover, color="black",
         alpha=0.6, linewidth=2)
plt.title('Year 2016')
plt.tick_params(labelsize=12)
plt.xticks(np.arange(12), np.arange(1,13))
plt.xlabel('Month', size=12)
plt.ylabel('crude-oil(in metric tonnes)', size=12)
plt.ylim(bottom=0)
plt.show()

Пример-2

import numpy as np
import matplotlib.pyplot as plt
year_n_1 = [15, 13, 10, 13, 22, 36, 30, 33, 24.5, 15, 16.5, 11.2]
year_n = [12, 17, 14, 16, 20, 27, 30, 38, 25, 18, 6, 11]
plt.fill_between(np.arange(12), year_n_1, color="lightpink",
                 alpha=0.5, label='year 2017')
plt.fill_between(np.arange(12), year_n, color="skyblue",
                 alpha=0.5, label='year 2018')
plt.title('Consumption of crude-oil(in metric tonnes) per year')
plt.tick_params(labelsize=12)
plt.xticks(np.arange(12), np.arange(1,13))
plt.xlabel('Month', size=12)
plt.ylabel('crude-oil(in metric tonnes)', size=12)
plt.ylim(bottom=0)
plt.legend()
plt.show()

c) График с областями с накоплением:
График с областями с накоплением - это продолжение основного графика или диаграммы с областями. Он отображает эволюцию стоимости нескольких групп на одном графике.

  • Он представляет кумулятивную сумму с использованием чисел или процентов с течением времени и визуализирует отношения от части к целому.
  • Значения каждой группы отображаются друг над другом.
  • Он также показывает, какой вклад каждая категория вносит в общую сумму.

Его можно построить с помощью функции matplotlib.pyplot.stackplot ().

matplotlib.pyplot.stackplot (x, * args, labels = () , colors = None, baseline = 'zero', data = None)

Давайте разберемся с несколькими примерами.

import numpy as np
import matplotlib.pyplot as plt
 
# FORMAT 1
 
# Your x and y axis
x=range(1,6)
y=[ [1,4,6,8,9], [2,2,7,10,12], [2,8,5,10,6] ]
# Basic stacked area chart.
plt.stackplot(x,y, labels=['A','B','C'],colors=  ['orange','c','grey'])
plt.legend(loc='upper left')
plt.show()
#FORMAT 2
x=range(1,6)
y1=[1,4,6,8,9]
y2=[2,2,7,10,12]
y3=[2,8,5,10,6]
 
# Basic stacked area chart.
plt.stackplot(x,y1, y2, y3, labels=['A','B','C'])
plt.legend(loc='upper left')
plt.show()

c) Точечная диаграмма:
показывает взаимосвязь между двумя переменными. Он отображает значение 2 наборов данных в двух измерениях. Каждая точка представляет собой наблюдение.

Его можно построить с помощью функции matplotlib.pyplot.scatter ().

matplotlib.pyplot.scatter (x, y, s = None, c = None, marker = None, cmap = None, norm = None, vmin = None , vmax = None, alpha = None, linewidths = None, verts = None, edgecolors = None, data = None,)

параметры:

Пример-1

#importing libraries
import matplotlib.pyplot as plt
import numpy as np
# Fixing random state for reproducibility
np.random.seed(19680801)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
#creating scatter plot
plt.scatter(x, y,c='black', alpha=0.5)
plt.show()

d) Пузырьковая диаграмма:
Это диаграмма рассеяния, в которую добавлено третье измерение. Значение дополнительной переменной представлено размером точек.

Example-1
import matplotlib.pyplot as plt
import numpy as np
# Fixing random state for reproducibility
np.random.seed(19680801)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radiiplt.scatter(x, y, s=area, c='black', alpha=0.5)
plt.show()

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

Example-2 
import matplotlib.pyplot as plt
import numpy as np
# Fixing random state for reproducibility
np.random.seed(19680801)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radiiplt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()

Этот график такой же, как и выше, но пузыри заполнены разными цветами, которые представляют четвертое измерение.

д) Гистограмма:
Гистограмма - это диаграмма, на которой представлены категориальные данные с прямоугольными полосами, длина которых пропорциональна значениям, которые они представляют. Одна ось графика показывает конкретные сравниваемые категории, а другая ось представляет измеренное значение.

i) Простая гистограмма

import matplotlib.pyplot as plt
%matplotlib inline
#creating a new figure
fig = plt.figure()
#adding axes to the figure
ax = fig.add_axes([0,0,1,1])
langs = ['C', 'C++', 'Java', 'Python', 'PHP','R']
students = [5000,6300,10000,9000,3000,4000]
#Y-label
plt.ylabel('Students')
#X-lable
plt.xlabel('Programming languages')
#title
plt.title('No. of Students learning Programming language')
#creating bar-plot
ax.bar(langs,students,width=0.5,color='black',alpha=0.7)
#saving the figure in .png format
plt.savefig('plot.png', dpi=300, bbox_inches='tight')
plt.show()

ii) Сгруппированная гистограмма:
Это тип гистограммы, на которой сравниваются несколько наборов элементов данных, причем один цвет используется для обозначения определенной серии во всех наборах.

#importing libraries
import numpy as np
import matplotlib.pyplot as plt
#datas to be plotted
data = [[30, 25, 50, 20],
[40, 23, 51, 17],
[35, 22, 45, 19]]
label=['Match-1','Match-2','Match-3','Match-4']
X = np.arange(len(label))
y=[0.25,1.25,2.25,3.25]
#creating figure,axex,title&labels
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
plt.xlabel('Match')
plt.ylabel('Score')
plt.title('Comparing scores of three players in different cricket matches')
plt.xticks(y,label)
#creating bar plots
ax.bar(X + 0.00, data[0], color = 'black', width = 0.25,alpha=0.5,label='Ricky Ponting')
ax.bar(X + 0.25, data[1], color = 'orange', width = 0.25,alpha=0.6,label='Sachin Tendulkar')
ax.bar(X + 0.50, data[2], color = 'red', width = 0.25,alpha=0.5,label='Adam Gilchrist')
plt.legend()
plt.show()

iii) Гистограмма с накоплением:
Это тип гистограммы. t используется, чтобы показать, как большая категория делится на более мелкие категории и какое отношение каждая часть имеет к общей сумме.

Пример:

#importing libraries
import numpy as np
import matplotlib.pyplot as plt
male = (20, 35, 30, 35, 27)
female = (25, 32, 34, 20, 25)
ind = np.arange(5)    # the x locations for the groups

plt.bar(ind, male, width= 0.35 ,color='black',alpha=0.8,label='Male')
plt.bar(ind, female, width= 0.35 ,bottom=male,color='orange',label='Feamle')
plt.ylabel('Age(in Years)')
plt.title('Age of employees by group and gender')
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend()
plt.show()

iv) Гистограмма на полярной оси:
Используется для отображения данных в виде полос, проведенных от центра угловой оси к значению данных.

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

import numpy as np
import matplotlib.pyplot as plt
# Fixing random state for reproducibility
np.random.seed(19680801)
# Compute pie slices
N = 20
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)
colors = plt.cm.viridis(radii / 10.)
ax = plt.subplot(111, projection='polar')
ax.bar(theta, radii, width=width, bottom=0.0, color=colors, alpha=0.5)
plt.show()

f) Гистограмма:
Это точное представление распределения числовых данных. Это оценка распределения вероятностей непрерывной переменной. Это своего рода гистограмма.

Его можно построить с помощью функции matplotlib.pyplot.hist ().

matplotlib.pyplot.hist (x, bins = None, range = None , density = None, weights = None, cumulative = False, bottom = None, histtype = 'bar', align = 'mid', direction = 'vertical', rwidth = None, log = Ложь, color = None, label = None, stacked = False, normed = None, data = None,)

Пример-1

from matplotlib import pyplot as plt
import numpy as np
fig,ax = plt.subplots(1,1)
marks = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
ax.hist(marks , 
bins =[0,20,40,60,80,100],color='green',alpha=0.4,edgecolor='black')
ax.set_title("Histogram of Result")
ax.set_xticks([0,20,40,60,80,100])
ax.set_xlabel('marks')
ax.set_ylabel('no. of students')

plt.show()

ii) Гистограмма ступенчатого типа

from matplotlib import pyplot as plt
import numpy as np
fig,ax = plt.subplots(1,1)
marks = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
ax.hist(marks , bins = [0,20,40,60,80,100],color='green',alpha=0.4,histtype='step')
ax.set_title("Histogram of Result")
ax.set_xticks([0,20,40,60,80,100])
ax.set_xlabel('marks')
ax.set_ylabel('no. of students')

plt.show()

Этот график представляет собой гистограмму ступенчатого типа, такую ​​же, как и график выше, но столбцы не залиты какими-либо цветами.

iii) Множественные гистограммы

from matplotlib import pyplot as plt
import numpy as np
vfig,ax = plt.subplots(1,1)
value1=np.array([82,76,24,40,67,62,75,78,71,32,98,89,78,67,72,82,87,66,56,52])
value2=np.array([62,5,6,91,25,36,32,96,41,42,43,95,3,90,95,32,27,55,100,15,71,11,37,21])

ax.hist(value1 , bins = [0,10,20,30,40,50,60,70,80,90,100],color='black',alpha=0.6,histtype='bar',edgecolor='black')
ax.hist(value2 , bins = [0,10,20,30,40,50,60,70,80,90,100],color='skyblue',alpha=0.7,histtype='bar',edgecolor='black')
plt.title('Multiple Histograms')
plt.show()

g) График плотности:
График плотности представляет собой распределение любого набора числовых данных. Этот график очень полезен при одномерном анализе данных.

Пример:

from matplotlib import pyplot as plt
import pandas as pd
score= np.array([22,56,5,68,58,73,55,54,11,20,71,5,79,31,27])
data=pd.DataFrame(score)
data.plot(kind='density', layout=(3,3),color='red',alpha=0.6)
plt.legend(['Score'])
plt.show()

h) Круговая диаграмма:
Это круговой статистический график, который разделен на части, чтобы проиллюстрировать числовые пропорции. На круговой диаграмме длина дуги каждого среза пропорциональна количеству, которое он представляет.

Его можно построить с помощью функции matplotlib.pyplot.pie ().

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

i) Основной круговой график

import matplotlib.pyplot as plt
# Pie chart, where the slices will be ordered and plotted counter-clockwise:
labels = 'English', 'Spanish', 'Russian', 'French','Chinese'
sizes = [55, 15, 8, 10,12]
explode = (0, 0, 0, 0.2,0)  # only "explode" the 2nd slice (i.e. 'Hogs')
color={'grey', 'orange','red','c','pink'}
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, colors=color,labels=labels, autopct='%1.1f%%',
        shadow=False, startangle=90,radius=1)
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.
plt.savefig('plot5.png', dpi=300, bbox_inches='tight')
plt.show()

ii) Вложенная круговая диаграмма:
Она также известна как многоуровневая круговая диаграмма или график. Он используется для отображения нескольких серий круговой диаграммы с помощью одной визуализации.

import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
       wedgeprops=dict(width=size, edgecolor='w'))
ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,
       wedgeprops=dict(width=size, edgecolor='w'))
ax.set(aspect="equal", title='Nested Pie plot')

plt.show()

i) Коробчатая диаграмма:
Коробчатая диаграмма - одна из наиболее важных диаграмм, используемых в машинном обучении. Он используется в исследовательском анализе данных (EDA), чтобы показать распределение числовых данных и асимметрию посредством отображения минимального и максимального баллов, квартилей (или процентилей) и т. Д.

i) Базовая рамочная диаграмма:
Ее можно построить с помощью функции matplotlib.pyplot.boxplot ().

matplotlib.pyplot.boxplot ( x, patch_artist = False, notch = False )

import matplotlib.pyplot as plt
import numpy as np
values = np.random.normal(100, 10, 200) 
 
box_plot_data=[values]
plt.boxplot(box_plot_data,patch_artist=False)
plt.show()

-Площадь с насечками

import matplotlib.pyplot as plt
import numpy as np
values = np.random.normal(100, 10, 200) 
 
box_plot_data=[values]
plt.boxplot(box_plot_data,patch_artist=False,notch=True)
plt.show()

ii) Множественные коробчатые диаграммы

а) Незаполненные ящичные участки

import matplotlib.pyplot as plt
 
value1=[82,76,24,40,67,62,75,78,71,32,98,89,78,67,72,82,87,66,56,52]
value2=[62,5,91,25,36,32,96,95,3,90,95,32,27,55,100,15,71,11,37,21]
value3=[23,89,12,78,72,89,25,69,68,86,19,49,15,16,16,75,65,31,25,52]
value4=[59,73,70,16,81,61,88,98,10,87,29,72,16,23,72,88,78,99,75,30]
 
box_plot_data=[value1,value2,value3,value4]
plt.boxplot(box_plot_data,patch_artist=True,labels=['course1','course2','course3','course4'])
plt.show()

б) Коробчатые диаграммы, заполненные одним цветом

c) Графики, заполненные разными цветами.

import matplotlib.pyplot as plt
 
value1=[82,76,24,40,67,62,75,78,71,32,98,89,78,67,72,82,87,66,56,52]
value2= [62,5,91,25,36,32,96,95,3,90,95,32,27,55,100,15,71,11,37,21]
value3=[23,89,12,78,72,89,25,69,68,86,19,49,15,16,16,75,65,31,25,52]
value4=[59,73,70,16,81,61,88,98,10,87,29,72,16,23,72,88,78,99,75,30]
 
box_plot_data=[value1,value2,value3,value4]
box=plt.boxplot(box_plot_data,patch_artist=True,labels=['course1','course2','course3','course4'], )
colors = ['orange', 'c', 'grey', 'pink']
for patch, color in zip(box['boxes'], colors):
    patch.set_facecolor(color)

plt.show()

k) График скрипки:
График скрипки похож на прямоугольный график, но, кроме того, он показывает распределение вероятностей данных при различных значениях.

Его можно построить с помощью функции matplotlib.pyplot.violinplot ().

matplotlib.pyplot.violinplot ( набор данных, position = None, vert = True , widths = 0,5, showmeans = False, showextrema = True, showmedians = False, points = 100, bw_method = None, *, data = None )

i) Базовый сценарий для скрипки

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
# Create a figure instance
fig = plt.figure()
# Create an axes instance
ax = fig.add_axes([0,0,1,1])
# Create the violin plot
ax.violinplot(collectn_1,vert=True)

plt.show()

Сюжет для скрипки с коробчатым сюжетом

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
## combine these different collections into a list
data_to_plot = [collectn_1]
# Create a figure instance
fig = plt.figure()
# Create an axes instance
ax = fig.add_axes([0,0,1,1])
# Create the boxplot
ax.violinplot(collectn_1 ,vert=True,showmedians=False)
ax.boxplot(data_to_plot,patch_artist=False)
ax.annotate('Violin Plot',(1.135,110))
ax.annotate('Box Plot',(1.09,100))
plt.title('Violin Plot with Box Plot')

plt.show()

ii) Сюжеты для нескольких скрипок

import matplotlib.pyplot as plt
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)
## combine these different collections into a list
data_to_plot = [collectn_1, collectn_2, collectn_3, collectn_4]
# Create a figure instance
fig = plt.figure()
# Create an axes instance
ax = fig.add_axes([0,0,1,1])
# Create the violinplot
bp = ax.violinplot(data_to_plot)
plt.show()

l) Граничный график:
Обычно граничный график - это график рассеяния (в центре), который имеет гистограммы, прямоугольные диаграммы, точечные графики или графики плотности на полях x- и оси ординат. Он используется для отображения взаимосвязи между двумя переменными и изучения их распределения.

i) График предельной гистограммы

import numpy as np
import matplotlib.pyplot as plt
# Fixing random state for reproducibility
#np.random.seed(19680801)
# the random data
x = np.random.randn(1000)
y = np.random.randn(1000)
x = np.random.randn(1000)
y = np.random.randn(1000)
# definitions for the axes
left, width = 0.1, 0.65
bottom, height = 0.1, 0.65
spacing = 0.005
rect_scatter = [left, bottom, width, height]
rect_histx = [left, bottom + height + spacing, width, 0.2]
rect_histy = [left + width + spacing, bottom, 0.2, height]
# start with a rectangular Figure
plt.figure(figsize=(8, 8))
ax_scatter = plt.axes(rect_scatter)
ax_scatter.tick_params(direction='in', top=True, right=True)
ax_histx = plt.axes(rect_histx)
ax_histx.tick_params(direction='in', labelbottom=False)
ax_histy = plt.axes(rect_histy)
ax_histy.tick_params(direction='in', labelleft=False)
# the scatter plot:
ax_scatter.scatter(x, y,c='r',alpha=0.3)
# now determine nice limits by hand:
binwidth = 0.25
lim = np.ceil(np.abs([x, y]).max() / binwidth) * binwidth
ax_scatter.set_xlim((-lim, lim))
ax_scatter.set_ylim((-lim, lim))
bins = np.arange(-lim, lim + binwidth, binwidth)
ax_histx.hist(x, bins=bins,color='r',edgecolor='black',alpha=0.6)
ax_histy.hist(y, bins=bins, orientation='horizontal',color='r',edgecolor='black',alpha=0.6)
ax_histx.set_xlim(ax_scatter.get_xlim())
ax_histy.set_ylim(ax_scatter.get_ylim())

plt.show()

ii) График предельного прямоугольника

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
x_data = np.random.randn(100)
y_data = -x_data + np.random.randn(100)*0.5
df = pd.DataFrame()
df['vcnt'] = x_data
df['ecnt'] = y_data
left = 0.1
bottom = 0.1
top = 0.8
right = 0.8
main_ax = plt.axes([left,bottom,right-left,top-bottom])
# create axes to the top and right of the main axes and hide them
top_ax = plt.axes([left,top,right - left,1-top])
plt.axis('off')
right_ax = plt.axes([right,bottom,1-right,top-bottom])
plt.axis('off')
main_ax.plot(df['vcnt'],  df['ecnt'], 'ko', alpha=0.5)
# Save the default tick positions, so we can reset them..
tcksx = main_ax.get_xticks()
tcksy = main_ax.get_yticks()
right_ax.boxplot(df['ecnt'], positions=[0],widths=1.)
top_ax.boxplot(df['vcnt'], positions=[0], vert=False,widths=1.)
main_ax.set_yticks(tcksy) # pos = tcksy
main_ax.set_xticks(tcksx) # pos = tcksx
main_ax.set_yticklabels([int(j) for j in tcksy])
main_ax.set_xticklabels([int(j) for j in tcksx])
main_ax.set_ylim([min(tcksy-1),max(tcksy)])
main_ax.set_xlim([min(tcksx-1),max(tcksx)])
# set the limits to the box axes
top_ax.set_xlim(main_ax.get_xlim())
top_ax.set_ylim(-1,1)
right_ax.set_ylim(main_ax.get_ylim())
right_ax.set_xlim(-1,1)

plt.show()

m) Стеблевая диаграмма:
Эта диаграмма также известна как диаграмма ствола и листа. Он используется для отображения количественных данных, как правило, из небольших наборов данных (50 или меньше наблюдений). Он показывает абсолютную частоту в разных классах аналогично таблице распределения частот или гистограмме.

Его можно построить с помощью функции matplotlib.pyplot.stem ().

matplotlib.pyplot.stem (x, y, linefmt = None, markerfmt = None , basefmt = None, bottom = 0, label = None, use_line_collection = False, data = None)

i) Простой стержневой график

# import matplotlib.pyplot library 
import matplotlib.pyplot as plt
data = [16, 25, 47, 56, 23, 45, 19, 55, 44, 27,24,23,12,33,32,14,65,43,41,43,21,10,15,13,65]
# separating the stem parts 
stems = [1, 1, 2, 2, 2,3,3,3,3,3,3, 4, 4, 4, 5, 5,6,6,6,7,7,8,8,9,9]
plt.ylabel('Data') # for label at y-axis
plt.xlabel('stems') # for label at x-axis
plt.xlim(0, 10) # limit of the values at x axis
plt.stem(stems,data,use_line_collection=True,markerfmt='C3o',linefmt='C7-',basefmt='C7-') # required plot 

plt.show()

ii) Построение различных функций с помощью Stem Plot

а) ехр (грех (х))

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.1, 2 * np.pi, 41)
y = np.exp(np.sin(x))
plt.stem(x,y,use_line_collection=True,markerfmt='C7o',linefmt='C7', basefmt='C7--')
plt.show()

б) exp (sin (x)) и exp (cos (x))

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.1, 2 * np.pi, 45)
y = np.exp(np.sin(x))
z = np.exp(np.cos(x))
plt.stem(x, y, use_line_collection=True,markerfmt='C7o',linefmt='C7-',basefmt='C7--')
plt.stem(x, z, use_line_collection=True,markerfmt='C6o',linefmt='C6-',basefmt='C6o')

plt.show()

n) Шаговая диаграмма:
Шаговая диаграмма - это линейная диаграмма, в которой не используется кратчайшее расстояние для соединения двух точек данных. Вместо этого он использует вертикальные и горизонтальные линии для соединения точек данных в серии, образующей ступенчатую последовательность.

Его можно построить с помощью функции matplotlib.pyplot.step ().

matplotlib.pyplot.step (x, y, label = None, color = None , where = 'pre', data = None, ** kwargs)

i) Простой шаговый график

import numpy as np
import matplotlib.pyplot as plt
x = np.array([2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2018,2019,2020])
y = np.array([5267,6227,3288,7222,2342,5233,7678,8735,4920,2000,6839,4352,6034,5029,2339])
plt.step(x, y, label='Salary',color='r')
plt.plot(x, y, 'C0o', alpha=0.5,color='black')
plt.xlabel('Year')
plt.ylabel('Salary in (in Rs)')
plt.title('Step Plot')
plt.legend(title='Parameter where:')

plt.show()

соответствующая линия Plot

import numpy as np
import matplotlib.pyplot as plt
x = np.array([2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2018,2019,2020])
y = np.array([5267,6227,3288,7222,2342,5233,7678,8735,4920,2000,6839,4352,6034,5029,2339])
plt.plot(x, y, 'C0o', alpha=0.5,color='black')
plt.plot(x, y, alpha=0.5,color='c')
plt.xlabel('Year')
plt.ylabel('Salary in (in Rs)')
plt.title('Line Plot')

plt.show()

ii) Многоступенчатые графики

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(14)
y = np.sin(x / 2)
plt.step(x, y + 2, label='pre (default)',color='r')
plt.plot(x, y + 2, 'C0o', alpha=0.5,color='black')
plt.step(x, y + 1, where='mid', label='mid',color='black')
plt.plot(x, y + 1, 'C1o', alpha=0.5,color='orange')
plt.step(x, y, where='post', label='post',color='orange')
plt.plot(x, y, 'C2o', alpha=0.5,color='black')
plt.legend(title='Parameter where:')

plt.show()

o) Контурная диаграмма:
Контурные диаграммы (также известные как диаграммы уровня) используются для отображения трехмерной поверхности на двухмерной плоскости. Это полезно при многомерном анализе данных.

Одна переменная представлена ​​на горизонтальной оси, а вторая переменная представлена ​​на вертикальной оси. Третья переменная представлена ​​цветовым градиентом и изолиниями (линиями постоянного значения).

Эти графики часто полезны при анализе данных, особенно когда вы ищете минимумы и максимумы в наборе трехкомпонентных данных.

Его можно построить с помощью функции matplotlib.pyplot.contour () или contourf ().

для контурных графиков без заливки:
matplotlib.pyplot.contour (x, y, z)

для контурных графиков с заливкой:
matplotlib.pyplot.contourf (x, y, z)

i) Незаполненный контурный график

import matplotlib.pyplot as plt
import numpy as np
w = 4
h = 3
d = 70
plt.figure(figsize=(w, h), dpi=d)
x = np.arange(-2, 2, 0.25)
y = np.arange(-2, 2, 0.25)
x, y = np.meshgrid(x, y)
z = np.sin(x * np.pi / 2) + np.cos(y * np.pi / 3)
plt.contour(x, y, z)
plt.show()

ii) Контур с заливкой

import numpy as np
import matplotlib.pyplot as plt
xlist = np.linspace(-3.0, 3.0, 100)
ylist = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)
fig,ax=plt.subplots(1,1)
cp = ax.contourf(X, Y, Z)
fig.colorbar(cp) # Adding a colorbar to a plot
ax.set_title('Filled Contours Plot')
ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')

plt.show()

p) Тепловая карта:
Это метод двухмерной визуализации, в котором числовые данные (где отдельные точки данных, содержащиеся в матрице) представлены разными цветами. Это очень полезный метод для многомерного анализа данных.

Он может отображать дисперсию нескольких переменных, корреляцию между ними или обнаруживать какие-либо закономерности. Его можно построить с помощью matplotlib.pyplot.imshow ().

i) Простая тепловая карта

import matplotlib.pyplot as plt
import numpy as np
data = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],
                    [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],
                    [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],
                    [0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],
                    [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],
                    [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],
                    [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])
plt.imshow(data,cmap='Blues' ,interpolation='nearest')
plt.colorbar()
plt.show()

q) График временного ряда:
график временного ряда - это тип линейного графика, на котором некоторая единица измерения времени находится на x -axis (также известная как ось времени), а измеряемая переменная находится на оси Y.
график временных рядов используется для поиска закономерностей в данных и использования данных для прогнозов.

i) График временных рядов цены акций V-Mart Retail Ltd (NSE)

import pandas as pd 
plt.style.use('seaborn-whitegrid')
data= pd.read_csv(r"C:\Users\parit\Downloads\VMART.NS.csv")
data.iloc[0:,0]=pd.to_datetime(data2.iloc[0:,0])
fig = plt.figure(figsize=(10,8))
ax = plt.axes()
plt.plot(data.iloc[0:,0],data.iloc[0:,1],color='r',alpha=0.4,label='NSE: VMART')
plt.xlabel('Days')
plt.ylabel('NSE Real Time Price(Currency in INR)')
plt.legend()
plt.title("V-Mart Retail Ltd" )

plt.show()

ii) Сравнение стоимости акций FRETAIL & SPENCERS

import pandas as pd
plt.style.use('seaborn-whitegrid')
data = pd.read_csv(r"C:\Users\parit\Downloads\FRETAIL.NS.csv")
data1= pd.read_csv(r"C:\Users\parit\Downloads\SPENCERS.NS.csv")
data.iloc[0:,0]=pd.to_datetime(data.iloc[0:,0])
data1.iloc[0:,0]=pd.to_datetime(data1.iloc[0:,0])
fig = plt.figure(figsize=(10,8))
ax = plt.axes()
plt.plot(data.iloc[0:,0],data.iloc[0:,1],color='darkorange',alpha=1,label='NSE: FRETAIL')
plt.plot(data1.iloc[0:,0],data1.iloc[0:,1],color='black',alpha=0.6,label='NSE: SPENCERS')
plt.xlabel('Days')
plt.ylabel('NSE Real Time Price(Currency in INR)')
plt.legend()
plt.title("Future Retail Ltd Vs Spencer's Retail Ltd" )

plt.show()

6. Трехмерное построение с помощью Matplotlib
Matplotlib широко используется для построения двухмерных графиков, но с помощью этой библиотеки также можно строить трехмерные графики. Трехмерные графики можно построить, импортировав набор инструментов mplot3d, включенный в пакет Matplotlib.

i) Простой трехмерный линейный график

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)

y=z * np.sin(20 * z)
x= z * np.cos(20 * z)

ax.plot3D(x, y, z, 'darkorange')
ax.set_title('3D line plot')

plt.show()

Модуль Matplotlib - это очень обширная библиотека, охватывающая все функции matplotlib, которые невозможны, если я как-то напишу также, это будет очень длинный блог. Я попытался охватить наиболее часто используемые функции matplotlib более простыми способами, чтобы люди поняли суть matplotlib и реализовали matplotlib лучше для визуализации ваших данных.

Удачного кодирования 😊