Мой вопрос (написанный в конце ниже) связан с построением гистограмм двух DataFrames на разных подцифрах ( Ситуация 1 ниже ) по сравнению с отображением их на одном и том же рисунке ( Ситуация 2 ниже ). Гистограммы строятся с интервалом в 1 час в качестве критерия группировки. Оба кадра данных имеют один столбец с временами в формате "HH:MM"
.
# Defining the two DataFrames
df_in = pd.DataFrame({'time': ['12:20', '12:06', '11:30', '11:03', '10:44', '10:50', '11:52',
'12:21', '9:58', '12:43','12:56', '13:27', '12:14',]})
df_out = pd.DataFrame({'time': ['19:40', '19:44', '19:21', '20:37', '20:27', '18:46', '19:42',
'18:12', '19:08', '21:09', '18:37', '20:34', '20:15']})
Ситуация 1 : построение обоих фреймов данных в разных подцифрах
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import FixedFormatter
fig, axes = plt.subplots(1, 2, figsize=(9, 3))
colors = ['r', 'b']
titles = ['df-in', 'df-out']
# Looping over the dataframes and plotting them in subfigures
for df, ax, c, t in zip([df_in, df_out], axes.flatten(), colors, titles):
df['hour'] = pd.to_datetime(df['time'], format='%H:%M')
df.set_index('hour', drop=False, inplace=True)
df = df['hour'].groupby(pd.Grouper(freq='60Min')).count()
df.plot(kind='bar', color=c, ax=ax)
ticklabels = df.index.strftime('%H:%Mh')
ax.xaxis.set_major_formatter(FixedFormatter(ticklabels))
ax.set_title(t, fontsize=18)
plt.show()
Выход ситуации 1

Ситуация 2 : отображение обоих фреймов данных на одном и том же рисунке
fig, axes = plt.subplots(figsize=(7, 3))
# Looping over the dataframes and plotting them in subfigures
for df, c, t in zip([df_in, df_out], colors, titles):
df['hour'] = pd.to_datetime(df['time'], format='%H:%M')
df.set_index('hour', drop=False, inplace=True)
df = df['hour'].groupby(pd.Grouper(freq='60Min')).count()
df.plot(kind='bar', color=c, ax=axes)
ticklabels = df.index.strftime('%H:%Mh')
axes.xaxis.set_major_formatter(FixedFormatter(ticklabels))
plt.show()
Выход ситуации 2

В обоих случаях код для форматирования строк взят из этого вопроса. Как вы можете видеть, красная и синяя гистограммы имеют соответствующие максимумы в 12:00 и 19:00 ч, если они представлены отдельно. Но когда я строю их на одном графике, две гистограммы перекрываются, а максимумы не в 12:00 и 19:00 ч. Проблема кажется тривиальной, но я не уверен, что происходит не так.
Мой вопрос : что необходимо изменить в Ситуация 2 , чтобы обе гистограммы были хорошо разделены и различимы (вместо перекрытия), поскольку они четко центрированы около 12:00 а 19:00 ч? Любые указатели и предложения приветствуются.