Установка делений оси Y в matplotlib
Суть проблемы: при выводе графиков с помощью matplotlib появляются неправильные деления. Вопрос в том, как установить нужные.
Есть таблицы с оценками в pandas.DataFrame: что то вроде:
Dec = pandas.DataFrame()
DataFrame Dec:
8: 5
9: 5
11: 4
15: 4
17: 3
20: 5
И точно такой же DataFrame ноября: Nov.
Первое число - день месяца, второе - оценка.
И вывод графика:
fig, axs = plt.subplots(ncols=2, figsize=(10, 5))
axs[0].plot(Nov)
axs[1].plot(Dec)
И вот проблем: оценки идут по 5-балльной системе, а график выводит вот такое:
Поскольку оценки у ученика в основном 5 и 4 за этот предмет, слева появляются ненужные цифры: 4.8, 4.6, 4.2, а мне нужны оценки от 2 до 5.
Я долго искал решение, в виде какого-то аргумента или функции, которое меняло бы это, но так и не нашёл.
Если кто-то знает, как это сделать, подскажите, пожалуйста.
Ответы (2 шт):
Вашу проблему должно решить декларирование yticks через set_yticks
axs[0].set_yticks((2, 3, 4, 5))
axs[1].set_yticks((2, 3, 4, 5))
Проблема, с которой вы столкнулись, связана с автоматической настройкой диапазона значений по оси Y на графиках, созданных через plot() в matplotlib. По умолчанию matplotlib устанавливает пределы оси Y, основываясь на значениях данных, что может привести к неожиданному масштабированию.
Чтобы решить эту проблему и установить нужные пределы по оси Y, вам следует использовать методы set_ylim() для каждого из ваших графиков. Вот как это можно сделать:
import matplotlib.pyplot as plt
import pandas as pd
# Предположим, что у вас есть DataFrame'ы Dec и Nov с данными
# Создание графиков
fig, axs = plt.subplots(ncols=2, figsize=(10, 5))
# Отображение данных на графиках
axs[0].plot(Nov)
axs[1].plot(Dec)
# Установка желаемых пределов по оси Y для каждого графика
axs[0].set_ylim(2, 5) # Желаемые пределы для левого графика
axs[1].set_ylim(2, 5) # Желаемые пределы для правого графика
# Отображение графиков
plt.show()
В вашем случае, если вам нужно явно указать, какие значения должны быть отображены на оси Y (например, 2, 3, 4 и 5), вы можете использовать set_yticks() для этого. Вот пример использования:
import matplotlib.pyplot as plt
import pandas as pd
# Предположим, что у вас есть DataFrame'ы Dec и Nov с данными
# Создание графиков
fig, axs = plt.subplots(ncols=2, figsize=(10, 5))
# Отображение данных на графиках
axs[0].plot(Nov)
axs[1].plot(Dec)
# Установка желаемых пределов и делений по оси Y для каждого графика
axs[0].set_ylim(2, 5)
axs[0].set_yticks([2, 3, 4, 5])
axs[1].set_ylim(2, 5)
axs[1].set_yticks([2, 3, 4, 5])
# Отображение графиков
plt.show()
Установка пределов с помощью set_ylim во втором примере тоже нужна, потому что иначе графики поломаются.
