В этому уроке рассмотрим на примерах работу со ступенчатым, стековым, stem-графиком и точечным графиком.
- Ступенчатый график
- Стековый график
- Stem-график
- Точечный график
- Статьи с описанием различных вариантов работы с точечными графиками
Ступенчатый график
Рассмотрим еще одни график – ступенчатый. Такой график строится с помощью функции step(), которая принимает следующий набор параметров:
- x: array_like
- набор данных для оси абсцисс
- y: array_like
- набор данных для оси ординат
- fmt: str, optional
- Задает отображение линии (см. функцию plot()).
- data: indexable object, optional
- метки
- where : {‘pre’, ‘post’, ‘mid’}, optional, default ‘pre’
- Определяет место, где будет установлен шаг.
- ‘pre’: значение y ставится слева от значения x, т.е. значение y[i] определяется для интервала (x[i-1]; x[i]).
- ‘post’: значение y ставится справа от значения x, т.е. значение y[i] определяется для интервала (x[i]; x[i+1]).
- ‘mid’: значение y ставится в середине интервала.
- Определяет место, где будет установлен шаг.
x = np.arange(0, 7) y = x where_set = ['pre', 'post', 'mid'] fig, axs = plt.subplots(1, 3, figsize=(15, 4)) for i, ax in enumerate(axs): ax.step(x, y, "g-o", where=where_set[i]) ax.grid()
Стековый график
Для построения стекового графика используется функция stackplot(). Суть его в том, что графики отображаются друг над другом, и каждый следующий является суммой предыдущего и заданного набора данных:
x = np.arange(0, 11, 1) y1 = np.array([(-0.2)*i**2+2*i for i in x]) y2 = np.array([(-0.4)*i**2+4*i for i in x]) y3 = np.array([2*i for i in x]) labels = ["y1", "y2", "y3"] fig, ax = plt.subplots() ax.stackplot(x, y1, y2, y3, labels=labels) ax.legend(loc='upper left')
Верхний край области y2 определяется как сумма значений из наборов y1 и y2, y3 – соответственно сумма y1, y2 и y3.
Stem-график
Визуально этот график выглядит как набор линий от точки с координатами (x, y) до базовой линии, в верхней точке ставится маркер:
x = np.arange(0, 10.5, 0.5) y = np.array([(-0.2)*i**2+2*i for i in x]) plt.stem(x, y)
Дополнительные параметры функции stem():
- linefmt: str, optional
- Стиль вертикальной линии
Символ | Стиль линии |
‘-‘ | Сплошная линия (solid line style) |
‘–‘ | Штриховая линия (dashed line style) |
‘-.’ | Штрих-пунктирная линия (dash-dot line style) |
‘:’ | Штриховая линия (dotted line style) |
- markerfmt: str, optional
- Формат маркера
Значение | Описание |
‘o’ | Круг (Circle) |
‘+’ | Знак плюс (Plus sign) |
‘*’ | Звездочка (Asterisk) |
‘.’ | Точка (Point) |
‘x’ | Крест (Cross) |
‘square’ or ‘s’ | Квадрат (Square) |
‘diamond’ or ‘d’ | Ромб (Diamond) |
‘^’ | Треугольник, направленный вниз (triangle_down) |
‘v’ | Треугольник, направленный вверх(triangle_up) |
‘<‘ | Треугольник, направленный влево (triangle_left) |
‘>’ | Треугольник, направленный вправо (triangle_right) |
‘pentagram’ or ‘p’ | Пятиугольник (Five-pointed star (pentagram)) |
‘hexagram’ or ‘h’ | Шестиугольник (Six-pointed star (hexagram)) |
‘none’ | Нет маркера (No markers) |
- basefmt: str, optional
- Формат базовой линии
- bottom: float, optional, default: 0
- y-координата базовой линии
Реализуем пример, демонстрирующий работу с дополнительными параметрами:
plt.stem(x, y, linefmt="r--", markerfmt="^", bottom=1)
Точечный график
Для отображения точечного графика предназначена функция scatter(). В простейшем виде точечный график можно получить передав функции scatter() наборы точек для x, y координат:
x = np.arange(0, 10.5, 0.5) y = np.cos(x) plt.scatter(x, y)
Для более детальной настройки отображения необходимо воспользоваться дополнительными параметрами функции scatter(), сигнатура ее вызова имеет следующий вид:
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, *, plotnonfinite=False, data=None, **kwargs)
Рассмотрим некоторые из параметров:
Параметр | Тип | Описание |
x | array_like, shape (n, ) | Набор данных для оси абсцисс |
y | array_like, shape (n, ) | Набор данных для оси ординат |
s | scalar или array_like, shape (n, ), optional | Масштаб точек |
c | color, sequence, или sequence of color, optional | Цвет |
marker | MarkerStyle, optional | Стиль точки объекта |
cmap | Colormap, optional, default: None | Цветовая схема |
norm | Normalize, optional, default: None | Нормализация данных |
alpha | scalar, optional, default: None | Прозрачность |
linewidths | scalar или array_like, optional, default: None | Ширина границы маркера |
edgecolors | {‘face’, ‘none’, None} или color или sequence of color, optional. | Цвет границы |
Создадим решение, использующее расширенные параметры для настройки отображения графика:
x = np.arange(0, 10.5, 0.5) y = np.cos(x) plt.scatter(x, y, s=80, c="r", marker="D", linewidths=2, edgecolors="g")
Пример, демонстрирующий работу с цветом и размером:
import matplotlib.colors as mcolors bc = mcolors.BASE_COLORS x = np.arange(0, 10.5, 0.25) y = np.cos(x) num_set = np.random.randint(1, len(mcolors.BASE_COLORS), len(x)) sizes = num_set * 35 colors = [list(bc.keys())[i] for i in num_set] plt.scatter(x, y, s=sizes, alpha=0.4, c=colors, linewidths=2, edgecolors="face") plt.plot(x, y, "g--", alpha=0.4)
Статьи с описанием различных вариантов работы с точечными графиками
Точный график с гистрограммой распределения
Задание отображения точек в зависимости от региона
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Ссайт реально хороший.Ребята все чётко объяснили.Вопросов нет