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

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Советы по использованию ВМ

После запуска ВМ щелкните в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами при обучении, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем необходимые библиотеки

Начнем с импорта необходимых библиотек для данного примера: matplotlib.pyplot и numpy. Кроме того, импортируем matplotlib.tri для триангуляции данных.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as tri

Генерируем случайные данные

Мы генерируем случайные данные с использованием метода np.random.uniform из NumPy. Мы генерируем npts = 200 точек данных с значениями x и y в диапазоне от -2 до 2. Также вычисляем значения z с использованием функции z = x * np.exp(-x**2 - y**2).

np.random.seed(19680801)
npts = 200
x = np.random.uniform(-2, 2, npts)
y = np.random.uniform(-2, 2, npts)
z = x * np.exp(-x**2 - y**2)

Интерполяция на сетке

Мы создаем контурную диаграмму для координат несбалансированных данных с помощью интерполяции на сетке. Сначала мы создаем значения сетки для x и y с использованием np.linspace. Затем мы линейно интерполируем данные (x, y) на сетке, определенной (xi, yi), с использованием tri.LinearTriInterpolator. Мы строим график интерполированных данных с помощью обычного axes.Axes.contour.

ngridx = 100
ngridy = 200
xi = np.linspace(-2.1, 2.1, ngridx)
yi = np.linspace(-2.1, 2.1, ngridy)

triang = tri.Triangulation(x, y)
interpolator = tri.LinearTriInterpolator(triang, z)
Xi, Yi = np.meshgrid(xi, yi)
zi = interpolator(Xi, Yi)

fig, ax1 = plt.subplots()
cntr1 = ax1.contourf(xi, yi, zi, levels=14, cmap="RdBu_r")
ax1.plot(x, y, 'ko', ms=3)
ax1.set(xlim=(-2, 2), ylim=(-2, 2))
ax1.set_title('Contour Plot of Irregularly Spaced Data Interpolated on a Grid')
fig.colorbar(cntr1, ax=ax1)
plt.show()

Tricontour

Мы строим график того же набора данных с использованием tricontour-диаграммы, напрямую передавая неупорядоченные, несбалансированные координаты в axes.Axes.tricontour.

fig, ax2 = plt.subplots()
cntr2 = ax2.tricontourf(x, y, z, levels=14, cmap="RdBu_r")
ax2.plot(x, y, 'ko', ms=3)
ax2.set(xlim=(-2, 2), ylim=(-2, 2))
ax2.set_title('Tricontour Plot of Irregularly Spaced Data')
fig.colorbar(cntr2, ax=ax2)
plt.show()

Резюме

В этом практическом занятии показано, как создавать контурную диаграмму для несбалансированных данных в Python с использованием Matplotlib. Мы сравнили контурную диаграмму для несбалансированных данных, интерполированных на регулярной сетке, с tricontour-диаграммой для неструктурированной треугольной сетки. Методы axes.Axes.contour и axes.Axes.tricontour использовались для создания контурных диаграмм.