#python #matplotlib #subfigure
Вопрос:
Я пытаюсь отобразить фигуру с подфигурами. Каждая подфигура сжимается вертикально, и я не понимаю, почему. Я попытался установить соотношение сторон, но это, похоже, только сужает его, не решая проблему того, что изображение недостаточно высокое, чтобы быть полезным. Я использую tight_layout
, но выходного размера более чем достаточно, чтобы он был больше. Я знаю, что могу более конкретно задать размер своих изображений с помощью макетов сетки, но я чувствую, что мне не хватает чего-то более простого, поскольку это не было проблемой ни с одним из моих подобных сюжетов с подфигурами.
Спасибо!
def plot_at_all_intervals_mod(series, series_name, series_file_name, is_date, write, ROLL_NUM = 4):
plt.close()
fig, axs = plt.subplots(4, 2)
# for row in axs:
# for ax in row:
# ax.set_aspect('equal')
#absolute
if is_date:
my_range = (unix_time_to_year(min(series)), unix_time_to_year(max(series)))
values, bins, _ = axs[0,0].hist(unix_time_to_year(series), log=False, bins=200, range=my_range)
else:
my_range = (min(series) / SECONDS_IN_A_YEAR, max(series) / SECONDS_IN_A_YEAR)
values, bins, _ = axs[0,0].hist(series / SECONDS_IN_A_YEAR, log=False, bins=200, range=my_range)
bins = bins.tolist()[:-1]
values = circular_moving_average(values.tolist(), ROLL_NUM)
axs[0,0].plot(bins,values)
axs[0,0].set_xlabel('Absolute Time')
axs[0,0].set_ylabel('Number of Logs')
axs[0,0].set_title(f'Distribution of {series_name} nOver Time')
#year
values, bins, _ = axs[0,1].hist(unix_time_to_day_of_year(series), log=False, bins=365*24)
bins = bins.tolist()[:-1 ]
values = circular_moving_average(values.tolist(), ROLL_NUM)
axs[0,1].plot(bins,values)
axs[0,1].set_xlabel('Day of Year (Starting Jan 1st)')
axs[0,1].set_ylabel('Number of Logs')
axs[0,1].set_title(f'Distribution of {series_name} nModulo Year')
#week
values, bins, _ = axs[1,0].hist(unix_time_to_day_of_week(series), log=False, bins=7*24*60)
bins = bins.tolist()[:-1]
values = circular_moving_average(values.tolist(), ROLL_NUM)
axs[1,0].plot(bins,values)
axs[1,0].set_xlabel('Day of Week (Starting at 0=Monday)')
axs[1,0].set_ylabel('Number of Logs')
axs[1,0].set_title(f'Distribution of {series_name} nOver Time Modulo Week')
#day
values, bins, _ = axs[1,1].hist(unix_time_to_time_of_day(series), log=False, bins=24*60)
bins = bins.tolist()[:-1 * ROLL_NUM]
values = moving_average(values.tolist(), ROLL_NUM)
axs[1,1].plot(bins,values)
axs[1,1].set_xlabel('Hour of Day')
axs[1,1].set_ylabel('Number of Logs')
axs[1,1].set_title(f'Distribution of {series_name} nOver Time Modulo Day')
#hour
values, bins, _ = axs[2,0].hist(unix_time_to_minute_in_hour(series), log=False, bins=60*60)
bins = bins.tolist()[:-1]
values = circular_moving_average(values.tolist(), ROLL_NUM)
axs[2,0].plot(bins,values)
axs[2,0].set_xlabel('Minute of Hour')
axs[2,0].set_ylabel('Number of Logs')
axs[2,0].set_title(f'Distribution of {series_name} nOver Time Modulo Hour')
#10 minutes
values, bins, _ = axs[2,1].hist(unix_time_to_minute_in_hour(series), log=False, bins=60*60)
bins = bins.tolist()[:-1]
values = circular_moving_average(values.tolist(), ROLL_NUM)
axs[2,1].plot(bins,values)
axs[2,1].set_xlabel('Minute of Hour')
axs[2,1].set_ylabel('Number of Logs')
axs[2,1].set_title(f'Distribution of {series_name} nOver Time Modulo Hour')
#minute
ROLL_NUM = 1
values, bins, _ = axs[3,0].hist(unix_time_to_second_in_minute(series), log=False, bins=60)
bins = bins.tolist()[:-1 * ROLL_NUM]
values = moving_average(values.tolist(), ROLL_NUM)
axs[3,0].plot(bins,values)
axs[3,0].set_xlabel('Second of Minute')
axs[3,0].set_ylabel('Number of Logs')
axs[3,0].set_title(f'Distribution of {series_name} n Over Time Modulo Minute')
fig.suptitle(f'Distribution of {series_name} Over Different Periods', fontsize=16)
fig.tight_layout()
fig.set_size_inches(20, 20)
fig.show()
if write:
fig.savefig(f'all-times-{series_file_name}.png')
Комментарии:
1. Обновление: теперь я вижу, что при настройке моего рисунка на 4 х 2 подзаголовка по умолчанию для подзаголовков задается определенное соотношение сторон. Исправляя это, я все еще получаю участки, которые просто слишком малы.
2. Подфигуры и плотная компоновка несовместимы. Вместо этого используйте constrained_layout.
3. Вы получите больше помощи с автономным примером. Никто не может проверить это за вас. Однако мой комментарий выше был неверным, потому что вы не используете подфигуру. Для подзаголовков tight_layout должен работать, поэтому я не уверен, в чем здесь проблема