Что может заставить Matplotlib игнорировать локаторы тиков по оси Y?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Что может заставить Matplotlib игнорировать локаторы тиков по оси Y?

Сообщение Anonymous »


У меня есть таблица с двумя столбцами: дата начала и дата окончания. Я создаю диапазон значений даты и времени с часовыми интервалами между этими двумя датами, начиная с 00:00 начальной даты и заканчивая 23:00 конечной даты.

Это полезно, поскольку у меня есть вторая таблица, содержащая данные за каждый час и соответствующую временную метку, включая дату и час съемки.

Мой код перебирает каждую строку первой таблицы, сопоставляя все даты в диапазоне дат с соответствующими значениями в таблице данных. Затем я рисую каждый из них один за другим в отдельном подсюжете. Если диапазон времени находится за пределами таблицы данных, я просто присваиваю ему все нули.

Моя проблема возникает, когда я пытаюсь установить пределы и отметки для оси Y для каждого подграфика. Я намеренно указываю, что хочу, чтобы пределы по оси Y находились в диапазоне от -150 до 150, и устанавливаю отметки с интервалом 50. Однако когда я рисую это, я получаю случайные значения с различным интервалом. Например, на одном графике я получаю один тик в 15, а другой в 27. На следующем я получаю один тик в -12, а другой в -37 но что-то не так: тик -37 находится ВЫШЕ -12 отметьте!

Мой код выглядит следующим образом:

fig, axs = plt.subplots(len(themis_data), figsize=(10, 2*len(themis_data))) для топора (индекс, строка) в zip(axs, themis_data.iterrows()): # Создайте серию временных меток с интервалом в 1 час между временем начала и остановки. date_range = pd.date_range(start=row['Date_Start'], end=row['Date_Stop']+pd.Timedelta(days=1)-pd.Timedelta(секунды=1), freq='1h') # Возвращаем все значения, соответствующие этим меткам времени filtered_dst_values ​​= DST_filtered.loc[DST_filtered['Date'].isin(date_range), 'DST'] #Почему-то если данных нет то заполняем все 0 если len(filtered_dst_values) == 0: filtered_dst_values ​​= pd.Series([0] * len(date_range)) # Постройте график возвращаемых значений ax.plot(date_range, filtered_dst_values) #Форматируем ось: устанавливаем пределы, локаторы делений и формат меток на оси X. ax.set_ylim((-150, 150)) ax.yaxis.set_major_locator(MultipleLocator(50)) ax.xaxis.set_major_locator(mdates.DayLocator(интервал=2)) ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d')) plt.tight_layout() plt.show() Выглядит как простая процедура построения графиков, но результат выглядит следующим образом:
Изображение


Изменить: вот примеры данных:

Date_Start,Date_Stop,Y_Start,Y_Stop,X_Max,DST 2011-11-26,2011-12-13,,,, 2012-12-23,2013-01-24,,,, 2014-02-26,2014-03-27,,,, 2015-05-01,2015-05-31,,,, 25.06.2016,14.07.2016,,,, 20.08.2017,22.09.2017,,,, 2018-09-26,2018-11-07,,,, 2019-11-05,2019-12-11,,,, 2020-12-10,2021-01-20,,,, 2022-01-11,2022-03-01,,,, 2023-03-01,2023-04-15,,,, ,DOY,летнее время,дата 8765,357,12.00,2012-12-22 23:00:00 8766,358,15.00,2012-12-23 00:00:00 8767,358,18.00,2012-12-23 01:00:00 8768,358,15.00,2012-12-23 02:00:00 8769,358,14.00,2012-12-23 03:00:00 8770,358,12.00,2012-12-23 04:00:00 8771,358,11.00,2012-12-23 05:00:00 8772,358,13.00,2012-12-23 06:00:00 8773,358,16.00,2012-12-23 07:00:00 8774,358,17.00,2012-12-23 08:00:00 8775,358,16.00,2012-12-23 09:00:00 8776,358,14.00,2012-12-23 10:00:00 8777,358,14.00,2012-12-23 11:00:00 8778,358,15.00,2012-12-23 12:00:00 8779,358,12.00,2012-12-23 13:00:00 8780,358,7.00,2012-12-23 14:00:00 8781,358,5.00,2012-12-23 15:00:00 8782,358,4.00,2012-12-23 16:00:00 8783,358,4.00,2012-12-23 17:00:00 8784,358,6.00,2012-12-23 18:00:00 8785,358,9.00,2012-12-23 19:00:00 8786,358,12.00,2012-12-23 20:00:00 8787,358,13.00,2012-12-23 21:00:00 8788,358,14.00,2012-12-23 22:00:00 8789,358,16.00,2012-12-23 23:00:00 8790,359,20.00,2012-12-24 00:00:00 8791,359,21.00,2012-12-24 01:00:00 8792,359,16.00,2012-12-24 02:00:00 8793,359,13.00,2012-12-24 03:00:00 8794,359,12.00,2012-12-24 04:00:00 8795,359,14.00,2012-12-24 05:00:00 8796,359,16.00,2012-12-24 06:00:00 8797,359,16.00,2012-12-24 07:00:00 8798,359,16.00,2012-12-24 08:00:00 8799,359,13.00,2012-12-24 09:00:00 8800,359,12.00,2012-12-24 10:00:00 8801,359,13.00,2012-12-24 11:00:00 8802,359,17.00,2012-12-24 12:00:00 8803,359,17.00,2012-12-24 13:00:00 8804,359,17.00,2012-12-24 14:00:00 8805,359,12.00,2012-12-24 15:00:00 8806,359,6.00,2012-12-24 16:00:00 8807,359,2.00,2012-12-24 17:00:00 8808,359,2.00,2012-12-24 18:00:00 8809,359,5.00,2012-12-24 19:00:00 8810,359,8.00,2012-12-24 20:00:00 8811,359,9.00,2012-12-24 21:00:00 8812,359,10.00,2012-12-24 22:00:00 8813,359,12.00,2012-12-24 23:00:00 Вы можете изменить диапазоны дат, например 23.12.2012,24.12.2012,,,,
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»