Построение шкалы времени в индексированном формате данных с указанием даты и времени (ось X) - PullRequest
1 голос
/ 12 апреля 2020

Я работаю с индексированным датой-временем для отображения данных временного ряда температуры.

Ниже приведен фрагмент набора данных

Ссылка на почасовой климат данные: https://drive.google.com/file/d/1_2O0DpISmNfyt2_tEyopRxrzSKUd4n4u/view?usp=sharing

Я строю временные метки индекса по оси X. Вот результат для линейной оси x:

График температуры линейной шкалы

Теперь, когда я пытаюсь создать полулог, используя ax.set_xscale ('log ') (логарифмический масштаб для оси x и линейный масштаб для оси y), он не работает. В результате получается точно такой же предыдущий сюжет.

Вот что я сделал до сих пор:

import matplotlib.pyplot as plt 
%matplotlib inline
import matplotlib.dates as mdates
import pandas as pd

data = pd.read_csv('data.txt', sep = "\t", decimal = b',')

# Convert the Time column to actual dates = datetime64[ns]
data['Time'] = pd.to_datetime(data['Time'], format='%d.%m.%Y-%H:%M:%S')

#Take the time as the index of the dataframe
data = data.set_index('Time')

#Downsampling the data
data_daily_mean = data.resample('D').mean()
data_weekly_mean = data.resample('W').mean()
data_monthly_mean = data.resample('M').mean()

# Plotting the temperature
fig, ax = plt.subplots(figsize=(12.8, 7.2))
ax.plot(data['Temperature'], marker='.', linestyle='None', label='Hourly Data')
ax.plot(data_daily_mean['Temperature'], marker=',', linestyle=':', label='Daily Mean')
ax.plot(data_weekly_mean['Temperature'], marker='*', linestyle='-', label='Weekly Mean')
ax.semilogx(data_monthly_mean['Temperature'], marker='o', linestyle='-', label='Monthly Mean')
ax.set_ylabel('Temperature [°C]')
ax.set_title('Outdoor Roofed Temperature')
ax.set_xscale('log') # How to make it work for dates?
ax.grid(True)
ax.legend()

# Set x-axis major ticks to monthly interval, on the months first day
ax.xaxis.set_major_locator(mdates.MonthLocator(bymonthday=1))
# Format x-tick labels as day number and 3-letter month name
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d %b'));

Если они не появляются, вот ссылка на изображения:

https://drive.google.com/file/d/1YAxUK-azDrrzcRnIgQY3Ibcht0AY3JNc/view?usp=sharing

https://drive.google.com/file/d/1qJLE6MtNE6GSQkGUOGHDwpiV6sy8BDw7/view?usp=sharing

https://drive.google.com/file/d/1t-frQ6XtUIL3-mUdEnPD0FvIq6Ohx4Ih/view?usp=sharing

...