Автор оригинала: Chris.
Matplotlib с Python – самая мощная комбинация в области визуализации данных и науки о данных.
Это руководство занимает 25 минут вашего времени – если вы смотрите видео, это заберет вас 2-4 часа Отказ Но это будет отличные вложения вашего времени, потому что это заставит вас Лучший кодер и Более эффективные данные ученые Отказ
Давайте посмотрим на следующие участки – вы узнаете, как генерировать каждый из них в этом полном направлении в библиотеку MATPLOTLIB.
Красиво не так ли?
Или как вам нравится этот:
Это выглядит очень утонченным, но это просто, как вы увидите в следующем курсе MatPlotlib. Но первые вещи сначала начнусь с смирения смиренной линии!
Матплотлиб линия сюжет
Сюжет линии является наиболее знаковым из всех участков.
Нарисовать один в Matplotlib, используйте PLT.PLOT ()
Функция и передайте его список чисел, используемых в качестве значений оси Y.
По умолчанию значения оси X – это указатели списка прошедшей линии. MATPLOTLIB автоматически соединяет точки с синей линией по умолчанию. Вы можете изменить тип линии и размер маркера с дополнительными аргументами.
Синтаксис PLT.PLOT ()
:
plot([x], y, [fmt], *, data=None, **kwargs)
Пример звонков:
>>> plot(x, y) # plot x and y using default line style and color >>> plot(x, y, 'bo') # plot x and y using blue circle markers >>> plot(y) # plot y using x as index array 0..N-1 >>> plot(y, 'r+') # ditto, but with red plusses
Минимальный пример заключается в следующем:
import matplotlib.pyplot as plt plt.plot([0, 1, 2, 3]) plt.ylabel('line plot') plt.show()
Выходной вывод, сгенерированный этими четырьмя строками кода, представляет собой следующую простую строкую строку:
Подробнее В нашем полном руководстве Finxter: Сюжет линии Matplotlib – полезное иллюстрированное руководство
Matplotlib рассеивает участок
Снятые участки являются ключевым инструментом в любом арсенале аналитика данных. Если вы хотите увидеть отношения между двумя переменными, вы обычно собираетесь сделать график разброса.
Следующий код показывает минимальный пример создания графика разброса в Python.
import matplotlib.pyplot as plt x = [0, 1, 2, 3, 4, 5] y = [1, 2, 4, 8, 16, 32] plt.plot(x, y, 'o') plt.show()
Вы выполняете следующие шаги:
- Импортируйте модуль MATPLOTLIB.
- Создайте данные для
(х, у)
точки. - Сюжет данные, используя
PLT.PLOT ()
функция. Первый аргумент является намерением длях
ценности. Второй аргумент является утечником дляy
ценности. Третий аргумент – это стиль точки разброса.
Вот как этот результат выглядит как:
Подробнее В нашем полном руководстве Finxter: Разбросно-разброс Matplotlib – простое иллюстрированное руководство
Легенда Matplotlib
Вы нанесли некоторые данные в Matplotlib. Но вы не знаете, какие данные показывают, что? Пришло время для легенды!
Как добавить легенду в библиотеке Python’s Matplotlib?
- Метить это с
метка
Аргумент ключевых слов в вашем методе сюжета. - До
PLT.Show ()
, вызовPLT.LEGEND ()
Ваш сюжет будет отображаться с легендой.
Вот минимальный пример:
# Import necessary modules import matplotlib.pyplot as plt import numpy as np # Optional: Use seaborn style as it looks nicer than matplotlib's default import seaborn as sns; sns.set() # Generate data vals = np.array([0, 1, 2, 3, 4]) # Plot and label plt.plot(vals, label='vals') plt.legend() plt.show()
Если вы поступите и маркируете несколько строк, легенда будет содержать несколько записей.
plt.plot(vals, label='Linear') plt.plot(vals**2, label='Squared') plt.plot(vals**0.5, label='Square Root') plt.legend() plt.show()
Подробнее В нашем полном руководстве Finxter: Matplotlib Legend – полезное иллюстрированное руководство
Матплотлиб гистограмма
Во-первых, нам нужны некоторые данные.
Я пошел в это Сайт, чтобы узнать среднюю высоту и стандартное отклонение женщин США. Общеизвестно, что высота обычно распространяется. Так что я использовал Python’s Случайные Модуль для создания 10 000 образцов
import random # data obtained online mean = 162 std = 7.1 # set seed so we can reproduce our results random.seed(1) # use list comprehension to generate 10,000 samples us_female_heights = [random.normalvariate(mean, std) for i in range(10000)]
Дополнительный шаг: участки по умолчанию Seaborn выглядят лучше, чем matplotlib, поэтому давайте их используем.
import seaborn as sns sns.set()
Самая основная гистограмма в matplotlib.pyplot
действительно легко сделать
import matplotlib.pyplot as plt plt.hist(us_female_heights) plt.show()
Не плохо для основных настроек. Общая форма ясна. Мы видим, что большинство данных сосредоточены в середине – 155см-170см. Мы также можем увидеть счетчики частоты.
Поскольку мы знаем наши данные, мы знаем, что ось X высота в CM, а ось Y – это частота. Но вы должны всегда Пометьте свои оси. Другие люди не знают, что показывает этот график. Добавление этикеток делает это понятно. Напишите эти три строки кода, чтобы дать графику заголовка и этикетки оси.
plt.hist(us_female_heights) plt.title('Height of 10,000 US Females') plt.xlabel('Height (cm)') plt.ylabel('Frequency') plt.show()
Подробнее В нашем полном руководстве Finxter: Матплотлиб гистограмма – простое иллюстрированное руководство
Matplotlib 3d участок
В дополнение к Импорт matplotlib.pyplot как PLT
и звонить PLT.Show ()
, чтобы создать 3D участок в Matplotlib, вам нужно:
- Импорт
AXES3D
объект - Инициализировать свой
Фигура
иAXES3D
объекты - Получите некоторые 3D-данные
- Сюжет его, используя
Оси
Нотации и стандартные вызовы функций
# Standard import import matplotlib.pyplot as plt # Import 3D Axes from mpl_toolkits.mplot3d import axes3d # Set up Figure and 3D Axes fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # Get some 3D data X = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Y = [2, 5, 8, 2, 10, 1, 10, 5, 7, 8] Z = [6, 3, 9, 6, 3, 2, 3, 10, 2, 4] # Plot using Axes notation and standard function calls ax.plot(X, Y, Z) plt.show()
Потрясающие! Вы только что создали свой первый трехмерный участок! Не волнуйтесь, если это было немного быстро, давайте погрузимся в более подробный пример.
Подробнее В нашем полном руководстве Finxter: MATPLOTLIB 3D участник – Полезное иллюстрированное руководство
MATPLOTLIB 3D участок продвинутый
Четыре шага, необходимые для создания продвинутых трехмерных участков, такие же, как те, которые необходимы для создания основных. Если вы не понимаете эти шаги, ознакомьтесь с моей статьей о том, как сначала сделать основные 3D-участки.
Самая сложная часть создания поверхностных и каркажных участков – шаг 3: Получение 3D-данных. Matplotlib на самом деле включает в себя функцию помощника AXES3D.GET_TEST_DATA ()
создать некоторые данные для вас. Он принимает поплавок и, для достижения наилучших результатов, выберите значение от 0 до 1. Он всегда производит тот же сюжет, но разные поплавки дают вам данные разных размеров и, таким образом, влияют на то, насколько подробно описан сюжет.
Тем не менее, лучший способ выучить 3D-построение – создать пользовательские участки.
В конце шага 3 вы хотите иметь три Numpy массивы X
, Y
и Z
, который вы перейдете к AX.PLOT_WIREFRAME ()
или ax.plot_surface ()
Отказ Вы можете сломать шаг 3 на четыре шага:
- Определите пределы оси X Axis и Y
- Создайте сетку XY-точек (чтобы получить X и Y)
- Определите Z-функцию
- Примените Z-функцию на x и y (чтобы получить z)
В MatPlotlib Axis Z вертикальна по умолчанию. Итак, «дно» AXES3D
Объект – это сетка очков XY. Для поверхностных или каркажных участков каждой пары точек XY имеет соответствующее значение Z. Итак, мы можем подумать о поверхностных/каркажных разах в качестве результата нанесения некоторой Z-функции для каждой пары XY на «нижней части» AXES3D
объект.
Поскольку на плоскости XY бесконечно много количества, невозможно отобразить каждому на Z-значение Z. Вам просто нужна сумма, достаточно большая, чтобы обмануть людей – что-то выше 50 пар обычно хорошо работает.
Чтобы создать свои темы XY, сначала необходимо определить пределы оси X Axis и Y. Покажем, вы хотите, чтобы X-значения в диапазоне от -5 до +5 и Y-значений от -2 до +2. Вы можете создать массив номеров для каждого из них, используя np.linspace () функция. По причинам, которые станут ясными позже, я сделаю х
иметь 100 баллов, а y
иметь 70.
x = np.linspace(-5, 5, num=100) y = np.linspace(-2, 2, num=70)
Оба х
и y
1D массивы, содержащие Num
одинаково разнесенные поплавки в диапазонах [-5, 5]
и [-2, 2]
соответственно.
Поскольку XY-самолет представляет собой 2D-объект, вам теперь нужно создать прямоугольную сетку всех паре XY. Для этого используйте numpy Функция np.meshgrid ()
Отказ Требуется N
1D массивы и превращает их в N-мерную сетку. В этом случае требуется две 1-й массивы и превращает их в 2D сетку.
X, Y = np.meshgrid(x, y)
Теперь вы создали X
и Уход
Так что давайте осмотрим их.
print(f'Type of X: {type(X)}') print(f'Shape of X: {X.shape}\n') print(f'Type of Y: {type(Y)}') print(f'Shape of Y: {Y.shape}')
Type of X:Shape of X: (70, 100) Type of Y: Shape of Y: (70, 100)
Оба Икс
и Y
Обмочненные массивы одной и той же формы: (70, 100)
. Это соответствует размеру y
и х
соответственно. Как вы ожидаете, размер y
Диктует высоту массива, то есть количество строк и размер х
Диктует ширину, то есть количество столбцов.
Обратите внимание, что я использовал строчные буквы х
и y
Для 1D массивов и прописных букв X
и Y
для 2D массивов. Это стандартная практика при изготовлении трехмерных участков, и я использую его по всей статье.
Теперь вы создали свою сетку очков; Пришло время определить функцию, чтобы подать заявку на них все. Поскольку эта функция выводит значения Z, я называю его Z-функцией. Общие Z-функции содержать np.sin ()
и np.cos ()
Поскольку они создают повторение, циклические узоры, которые выглядят интересными, когда это нанесено в 3D. Кроме того, Z-функции обычно объединяют оба X
и Y
Переменные в качестве 3D-участков видят, как все переменные взаимодействуют.
# Define z-function with 2 arguments: x and y def z_func(x, y): return np.sin(np.cos(x) + y) # Apply to X and Y Z = z_func(X, Y)
Здесь я определил Z-функцию, которая принимает 2 переменных – х
и y
– и это комбинация np.sin ()
и np.cos ()
Функции. Тогда я применил его к Икс
и Y
Чтобы получить Z
множество. Благодаря Numpy вещание Python Python применяет Z-функцию для каждой пары XY почти мгновенно и спасает вас от необходимости написать дико неэффективное для
петля.
Обратите внимание, что Z
такая же форма и тип, как и как X
и Y
Отказ
print(f'Type of Z: {type(Z)}') print(f'Shape of Z: {Z.shape}')
Type of Z:Shape of Z: (70, 100)
Теперь, когда у вас есть данные, все, что осталось сделать, это сделать участки. Давайте поставим все вышеупомянутый код вместе:
# Set up Figure and 3D Axes fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # Create x and y 1D arrays x = np.linspace(-5, 5, num=100) y = np.linspace(-2, 2, num=70) # Create X and Y 2D arrays X, Y = np.meshgrid(x, y) # Define Z-function def z_func(x, y): return np.sin(np.cos(x) + y) # Create Z 2D array Z = z_func(X, Y) # Plot using Axes notation ax.plot_wireframe(X, Y, Z) # Set axes lables ax.set(xlabel='x', ylabel='y', zlabel='z') plt.show()
Отлично, я нашел вышеуказанный участок, играя с разными Z-функциями и думаю, что это выглядит довольно круто! Z-функции, содержащие np.log ()
, np.exp ()
, np.sin. ( )
, np.cos ()
и комбинации х
и y
Обычно приводит к интересным участкам – я призываю вас экспериментировать сами.
Теперь я создам 3 разных Z-функция с тем же Икс
и Уход
Как и раньше и создать подпункту из них, чтобы вы могли видеть различия.
# Set up Figure and Axes fig, axes = plt.subplots(1, 3, subplot_kw=dict(projection='3d'), figsize=plt.figaspect(1/3)) # Create 3 z-functions def z_1(x, y): return np.exp(np.cos(x)*y) def z_2(x, y): return np.log(x**2 + y**4) def z_3(x, y): return np.sin(x * y) # Create 3 Z arrays Z_arrays = [z_1(X, Y), z_2(X, Y), z_3(X, Y)] # Titles for the plots z_func_names = ['np.exp(np.cos(x)*y)', 'np.log(x**2 + y**4)', 'np.sin(x * y)'] # Plot all 3 wireframes for Z_array, z_name, ax in zip(Z_arrays, z_func_names, axes): ax.plot_wireframe(X, Y, Z_array) ax.set(title=z_name) plt.show()
Я думаю, что все эти изображения продемонстрируют силу 3D-построения, и я надеюсь, что они побуждают вас создать свои собственные.
Теперь вы знаете, как создать какую-либо поверхность или карта каркаса с вашими данными. Но до сих пор вы использовали только настройки по умолчанию. Давайте изменим их, используя доступные аргументы ключевых слов.
Подробнее В нашем полном руководстве Finxter: MATPLOTLIB 3D участок продвинутый
Матплотлиб анимация
Вот полный код:
# Standard imports import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # Set up empty Figure, Axes and Line objects fig, ax = plt.subplots() # Set axes limits so that the whole image is included ax.set(xlim=(-0.1, 2*np.pi+0.1), ylim=(-1.1, 1.1)) # Draw a blank line line, = ax.plot([], []) # Define data - one sine wave x = np.linspace(0, 2*np.pi, num=50) y = np.sin(x) # Define animate function def animate(i): line.set_data(x[:i], y[:i]) return line, # Pass to FuncAnimation anim = FuncAnimation(fig, animate, frames=len(x)+1, interval=30, blit=True) # Save in the current working directory anim.save('sin.mp4')
Подробнее В нашем полном руководстве Finxter: Матплотлиб анимация – Полезное иллюстрированное руководство
Виджеты Matplotlib – создание интерактивных участков со слайдами
В этом разделе описывается, как генерировать интерактивные участки, используя .widgets
Пакет из Библиотека Matplotlib Отказ Как можно вывести из имени, .widgets
Пакет позволяет создавать различные типы интерактивных кнопок, которые могут быть использованы для изменения того, что отображается в графике MATPLOTLIB.
В частности, эта статья сосредоточится на Создание кнопки ползуна это будет затем используется для Изменение типа кривой спины, интерполируя оригинальный график. Таким образом, можно будет оценить в реальном времени, эффект изменения некоторых параметров сплайна на посадке.
Но давайте начнем с окончания: Вот код, который вы собираетесь исследовать, а полученный участок:
import numpy as np from scipy.interpolate import UnivariateSpline import matplotlib.pyplot as plt from matplotlib.widgets import Slider # Initial x and y arrays x = np.linspace(0, 10, 30) y = np.sin(0.5*x)*np.sin(x*np.random.randn(30)) # Spline interpolation spline = UnivariateSpline(x, y, s = 6) x_spline = np.linspace(0, 10, 1000) y_spline = spline(x_spline) # Plotting fig = plt.figure() plt.subplots_adjust(bottom=0.25) ax = fig.subplots() p = ax.plot(x,y) p, = ax.plot(x_spline, y_spline, 'g') # Defining the Slider button # xposition, yposition, width and height ax_slide = plt.axes([0.25, 0.1, 0.65, 0.03]) # Properties of the slider s_factor = Slider(ax_slide, 'Smoothing factor', 0.1, 6, valinit=6, valstep=0.2) # Updating the plot def update(val): current_v = s_factor.val spline = UnivariateSpline(x, y, s = current_v) p.set_ydata(spline(x_spline)) #redrawing the figure fig.canvas.draw() # Calling the function "update" when the value of the slider is changed s_factor.on_changed(update) plt.show()
Выходные данные – это интерактивное окно сюжет Python, которое позволяет управлять графиком со слайдером:
Подробнее В нашем полном руководстве Finxter: Виджеты Matplotlib – создание интерактивных участков со слайдами
Создание красивых тепломаперов с морским
Графики являются специфическим типом участка, который использует комбинацию цветовых схем и числовых значений для представления сложных и сочлененных наборов данных. Они в значительной степени используются в приложении науки Data, которые включают в себя большое количество, таких как биология, экономика и медицина.
В этом видео мы увидим, как создать тепловую карту для представления общего числа случаев Covid-19 в разных странах США, в разные дни. Для достижения этого результата мы будем эксплуатировать Морской , пакет Python, который предоставляет множество причудливых и мощных функций для построения данных.
Вот код, который будет обсуждаться:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns #url of the .csv file url = r"path of the .csv file" # import the .csv file into a pandas DataFrame df = pd.read_csv(url, sep = ';', thousands = ',') # defining the array containing the states present in the study states = np.array(df['state'].drop_duplicates())[:40] #extracting the total cases for each day and each country overall_cases = [] for state in states: tot_cases = [] for i in range(len(df['state'])): if df['state'][i] == state: tot_cases.append(df['tot_cases'][i]) overall_cases.append(tot_cases[:30]) data = pd.DataFrame(overall_cases).T data.columns = states #Plotting fig = plt.figure() ax = fig.subplots() ax = sns.heatmap(data, annot = True, fmt="d", linewidths=0, cmap = 'viridis', xticklabels = True) ax.invert_yaxis() ax.set_xlabel('States') ax.set_ylabel('Day n°') plt.show()
Подробнее В нашем полном руководстве Finxter: Создание красивых тепломаперов с морским
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.
Оригинал: “https://blog.finxter.com/matplotlib-full-guide/”