Исправление избыточного количества делений на оси в Matplotlib

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

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

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

Введение

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

Советы по работе с ВМ

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

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

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

Проверьте тип данных

Первым шагом является проверка типа данных значений оси x. Если это список строк, то поведение делений на оси x, скорее всего, будет непредвиденным. Чтобы исправить это, необходимо преобразовать строки в числовые типы. Вот пример:

import matplotlib.pyplot as plt
import numpy as np

## create example data
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]

## plot the data with string tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.set_xlabel('Categories')
plt.show()

В этом примере у нас список строк на оси x. При построении графика метки делений на оси x расположены в неправильном порядке и находятся в неправильных местах.

Преобразуйте строки в числовые типы

Чтобы исправить поведение делений на оси, необходимо преобразовать строки в числовые типы. Вот пример:

import matplotlib.pyplot as plt
import numpy as np

## create example data
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]

## convert strings to floats
x = np.asarray(x, dtype='float')

## plot the data with numeric tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.set_xlabel('Floats')
plt.show()

В этом примере мы преобразуем строковые значения в числа с плавающей точкой с использованием np.asarray(). При повторном построении графика метки делений на оси расположены как ожидается.

Обработка избыточного количества делений на оси

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

import matplotlib.pyplot as plt
import numpy as np

## create example data with 100 elements
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)

## plot the data with string tick labels
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Categories')
plt.show()

В этом примере на оси x есть 100 строковых значений, что приводит к слишком большому количеству делений, которые не читаются.

Чтобы исправить это, необходимо преобразовать строки в числа с плавающей точкой. Вот пример:

import matplotlib.pyplot as plt
import numpy as np

## create example data with 100 elements
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)

## convert strings to floats
x = np.asarray(x, float)

## plot the data with numeric tick labels
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Floats')
plt.show()

В этом примере мы преобразуем строковые значения в числа с плавающей точкой с использованием np.asarray(). При повторном построении графика метки делений на оси расположены как ожидается.

Обработка делений на оси с датой и временем

При работе с значениями даты и времени на оси x важно преобразовать строки в объекты datetime, чтобы получить правильные локаторы и форматировщики дат. Вот пример:

import matplotlib.pyplot as plt
import numpy as np

## create example data with datetime strings
x = ['2021-10-01', '2021-11-02', '2021-12-03', '2021-09-01']
y = [0, 2, 3, 1]

## convert strings to datetime64
x = np.asarray(x, dtype='datetime64[s]')

## plot the data with datetime tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.tick_params(axis='x', labelrotation=90)
plt.show()

В этом примере мы преобразуем строковые значения в datetime64 с использованием np.asarray(). При повторном построении графика метки делений на оси расположены как ожидается.

Резюме

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