Построение линейных графиков python

Как построить график функции на Python при помощи Matplotlib

Python предоставляет одну из самых популярных библиотек для построения графиков под названием Matplotlib. Это кроссплатформенный проект с открытым исходным кодом для создания 2D-графиков на основе данных в массиве. Обычно он используется для визуализации данных и представлен в виде различных графиков.

Matplotlib изначально задуман Джоном Д. Хантером в 2003 году. Последняя версия matplotlib – 2.2.0, выпущенная в январе 2018 года.

Прежде чем начать работу с библиотекой matplotlib, нам необходимо установить ее в нашей среде Python.

Установка Matplotlib

Введите следующую команду в своем терминале и нажмите клавишу ВВОД.

Приведенная выше команда установит библиотеку matplotlib и ее пакет зависимостей в операционной системе Windows. Разберемся как построить график функции на Python при помощи Matplotlib.

Базовая концепция Matplotlib

График состоит из следующих частей. Давайте разберемся с этими частями.

Составляющие части графика

Figure: это целая фигура, которая может содержать одну или несколько осей(графиков). Мы можем думать о figure как о холсте, на котором хранятся сюжеты.

Axes: фигура может содержать несколько осей. Онf состоит из двух или трех(в случае 3D) объектов Axis. Каждая ось состоит из заголовка, x-метки и y-метки.

Axis: оси – это количество объектов, похожих на линии, которые отвечают за создание пределов графика.

Artist: это все, что мы видим на графике, например, текстовые объекты, объекты Line2D и объекты коллекций. Привязаны к Axes.

Введение в pyplot

Matplotlib предоставляет пакет pyplot, который используется для построения графика заданных данных. Matplotlib.pyplot – это набор функций командного стиля, которые заставляют matplotlib работать как MATLAB. Пакет pyplot содержит множество функций, которые используются для создания фигуры, создания ее области построения, дополнения графика метками, проведения некоторых линий в области построения и т. д.

Мы можем быстро построить график с помощью pyplot. Давайте посмотрим на следующий пример.

Базовый пример построения графика

Программа для создания базового примера простого графика следующая:

from matplotlib import pyplot as plt #ploting our canvas plt.plot([1,2,3],[4,5,1]) #display the graph plt.show()

Пример построения простого графика

Построение графиков разного типа

Мы можем построить различные графики, используя модуль pyplot.

1. Линейный график

Линейный график используется для отображения информации в виде серии линий. Его легко строить.

from matplotlib import pyplot as plt x = [1,2,3] y = [10,11,12] plt.plot(x,y) plt.title("Line graph") plt.ylabel('Y axis') plt.xlabel('X axis') plt.show()

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

from matplotlib import pyplot as plt from matplotlib import style style.use('ggplot') x = [10, 12, 13] y = [8, 16, 6] x2 = [8, 15, 11] y2 = [6, 15, 7] plt.plot(x, y, 'b', label='line one', linewidth=5) plt.plot(x2, y2, 'r', label='line two', linewidth=5) plt.title('Epic Info') fig = plt.figure() plt.ylabel('Y axis') plt.xlabel('X axis') plt.show()

2. Столбчатая диаграмма

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

from matplotlib import pyplot as plt Names = ['Arun','James','Ricky','Patrick'] Marks = [51,87,45,67] plt.bar(Names,Marks,color = 'blue') plt.title('Result') plt.xlabel('Names') plt.ylabel('Marks') plt.show()

3. Круговая диаграмма

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

from matplotlib import pyplot as plt # Pie chart, where the slices will be ordered and plotted counter-clockwise: Aus_Players = 'Smith', 'Finch', 'Warner', 'Lumberchane' Runs = [42, 32, 18, 24] explode =(0.1, 0, 0, 0) # it "explode" the 1st slice fig1, ax1 = plt.subplots() ax1.pie(Runs, explode=explode, labels=Aus_Players, autopct='%1.1f%%', shadow=True, startangle=90) ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. plt.show()

Круговая диаграмма

4. Гистограмма

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

Читайте также:  Python pandas объединить строки

В следующем примере мы взяли данные о различных процентах баллов учащегося и построили гистограмму в зависимости от количества учащихся. Давайте разберемся в следующем примере.

from matplotlib import pyplot as plt from matplotlib import pyplot as plt percentage = [97,54,45,10, 20, 10, 30,97,50,71,40,49,40,74,95,80,65,82,70,65,55,70,75,60,52,44,43,42,45] number_of_student = [0,10,20,30,40,50,60,70,80,90,100] plt.hist(percentage, number_of_student, histtype='bar', rwidth=0.8) plt.xlabel('percentage') plt.ylabel('Number of people') plt.title('Histogram') plt.show()

Гистограмма

Разберемся еще на одном примере.

from matplotlib import pyplot as plt # Importing Numpy Library import numpy as np plt.style.use('fivethirtyeight') mu = 50 sigma = 7 x = np.random.normal(mu, sigma, size=200) fig, ax = plt.subplots() ax.hist(x, 20) ax.set_title('Historgram') ax.set_xlabel('bin range') ax.set_ylabel('frequency') fig.tight_layout() plt.show()

Пример 2

5. Точечная диаграмма

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

from matplotlib import pyplot as plt from matplotlib import style style.use('ggplot') x = [4,8,12] y = [19,11,7] x2 = [7,10,12] y2 = [8,18,24] plt.scatter(x, y) plt.scatter(x2, y2, color='g') plt.title('Epic Info') plt.ylabel('Y axis') plt.xlabel('X axis') plt.show()

Точечная диаграмма

import matplotlib.pyplot as plt a = [2, 2.5, 3, 3.5, 4.5, 4.7, 5.0] b = [7.5, 8, 8.5, 9, 9.5, 10, 10.5] a1 = [9, 8.5, 9, 9.5, 10, 10.5, 12] b1 = [3, 3.5, 4.7, 4, 4.5, 5, 5.2] plt.scatter(a, b, label='high income low saving', color='b') plt.scatter(a1, b1, label='low income high savings', color='g') plt.xlabel('saving*100') plt.ylabel('income*1000') plt.title('Scatter Plot') plt.legend() plt.show()

Точечная диаграмма - пример 2

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

Источник

Matplotlib. Урок 4.1. Визуализация данных. Линейный график

Follow us on Google Plus Follow us on rss

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

Читайте также:  Php use mysql connection

Построение графика

Для построения линейного графика используется функция plot() , со следующей сигнатурой:

plot([x], y, [fmt], *, data=None, **kwargs)

plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)

Если вызвать функцию plot() с одним аргументом – вот так: plot(y) , то мы получим график, у которого по оси ординат (ось y ) будут отложены значения из переданного списка, по по оси абсцисс (ось x ) – индексы элементов массива.

Рассмотрим аргументы функции plot() :

Параметры аргумента fmt

Определяет тип маркера, может принимать одно из значений, представленных в таблице ниже

Символ Описание
‘.’ Точка ( point marker )
‘,’ Пиксель ( pixel marker )
‘o’ Окружность ( circle marker )
‘v’ Треугольник, направленный вниз ( triangle_down marker )
‘^’ Треугольник, направленный вверх( triangle_up marker )
Треугольник, направленный влево ( triangle_left marker )
‘>’ Треугольник, направленный вправо ( triangle_right marker )
‘1’ Треугольник, направленный вниз ( tri_down marker )
‘2’ Треугольник, направленный вверх( tri_up marker )
‘3’ Треугольник, направленный влево ( tri_left marker )
‘4’ Треугольник, направленный вправо ( tri_right marker )
‘s’ Квадрат ( square marker )
‘p’ Пятиугольник ( pentagon marker )
‘*’ Звезда ( star marker )
‘h’ Шестиугольник ( hexagon1 marker )
‘H’ Шестиугольник ( hexagon2 marker )
‘+’ Плюс ( plus marker )
‘x’ Х-образный маркер ( x marker )
‘D’ Ромб ( diamond marker )
‘d’ Ромб ( thin_diamond marker )
‘|’ Вертикальная линия ( vline marker )
‘_’ Горизонтальная линия ( hline marker )

Стиль линии/ Может принимать одно из следующих значений:

Символ Описание
‘-‘ Сплошная линия ( solid line style )
‘–‘ Штриховая линия ( dashed line style )
‘-.’ Штрих-пунктирная линия ( dash-dot line style )
‘:’ Штриховая линия ( dotted line style )

Цвет графика. В рамках аргумента fmt цвет задается значением из следующей таблицы:

Символ Описание
‘b’ Синий
‘g’ Зеленый
‘r’ Красный
‘c’ Бирюзовый
‘m’ Фиолетовый (пурпурный)
‘y’ Желтый
‘k’ Черный
‘w’ Белый

Реализуем возможности plot() на примере:

x = [1, 5, 10, 15, 20] y1 = [1, 7, 3, 5, 11] y2 = [4, 3, 1, 8, 12] plt.figure(figsize=(12, 7)) plt.plot(x, y1, 'o-r', alpha=0.7, label="first", lw=5, mec='b', mew=2, ms=10) plt.plot(x, y2, 'v-.g', label="second", mec='r', lw=2, mew=2, ms=12) plt.legend() plt.grid(True)

Рассмотрим различные варианты использования линейного графика.

Заливка области между графиком и осью

Для заливки областей используется функция fill_between() . Сигнатура функции:

fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)

Основные параметры функции:

  • x : массив длины N
    • Набор данных для оси абсцисс.
    • Набор данных для оси ординат – первая кривая.
    • Набор данных для оси ординат – вторая кривая.
    • Задает заливаемый цветом регион, который определяется координатами x[where] : интервал будет залит между x[i] и x[i+1] , если where[i] и where[i+1] равны True .
    • Определяет шаг, если используется step -функция для отображения графика (будет рассмотрена в одном из следующих уроков).
    • Свойства класса Polygon

    Создадим набор данных для эксперимента:

    import numpy as np x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi)

    Отобразим график с заливкой:

    plt.plot(x, y, c = "r") plt.fill_between(x, y)

    plt.plot(x, y, c = "r") plt.fill_between(x, y, where = (y > 0.75) | (y < -0.75))

    Используя параметры y1 и y2 можно формировать более сложные решения.

    Заливка области между 0 и y , при условии, что y >= 0:

    plt.plot(x, y, c = "r") plt.fill_between(x, y, where = (y > 0))

    Заливка области между 0.5 и y , при условии, что y >= 0.5:

    plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, 0.5, y, where=y>=0.5)

    Заливка область между y и 1:

    plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, y, 1)

    Вариант двухцветной заливки:

    plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, y, where=y>=0, color="g", alpha=0.3) plt.fill_between(x, y, where=y
    

    Настройка маркировки графиков

    В начале этого раздела мы приводили пример использования маркеров при отображении графиков. Сделаем это ещё раз, но уже в упрощенном виде:

    x = [1, 2, 3, 4, 5, 6, 7] y = [7, 6, 5, 4, 5, 6, 7] plt.plot(x, y, marker="o", c="g")

    В наборе данных, который создает код:

    import numpy as np x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi)

    количество точек составляет 500, поэтому подход, представленный выше уже будет не применим:

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

    None – отображаться будет каждая точка;

    N – отображаться будет каждая N -я точка;

    (start, N) – отображается каждая N -я точка начиная с точки start ;

    slice(start, end, N) – отображается каждая N -я точка в интервале от start до end ;

    [i, j, m, n] – будут отображены только точки i, j, m, n .

    Ниже представлен пример, демонстрирующий работу с markevery :

    x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi) m_ev_case = [None, 10, (100, 30), slice(100,400,15), [0, 100, 200, 300], [10, 50, 100]] fig, ax = plt.subplots(2, 3, figsize=(10, 7)) axs = [ax[i, j] for i in range(2) for j in range(3)] for i, case in enumerate(m_ev_case): axs[i].set_title(str(case)) axs[i].plot(x, y, "o", ls='-', ms=7, markevery=case)

    Обрезка графика

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

    x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi) y_masked = np.ma.masked_where(y < -0.5, y) plt.ylim(-1, 1) plt.plot(x, y_masked, linewidth=3)

    P.S.

    Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта . Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.

    Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.

    Источник

Оцените статью