Я создаю фигуру с заголовком, 16 сюжетами и легендой. Я не могу на всю жизнь получить его, чтобы хорошо спасти. Я сделаю все возможное, чтобы объяснить свое затруднительное положение, но мой словарный запас может быть неправильным, поэтому я заранее извиняюсь.
Если я запускаю свой код (конец), я получаю следующий вывод: ![Bad Output one](https://i.stack.imgur.com/UzytF.png)
Это не красиво, все перекрывается или обрезается. Если бы я добавил plt.savefig()
, это то, что я получил.
Я могу перетащить углы всплывающего окна, и это дает мне очень красиво расположенную фигуру, и это именно то, что я хочу: ![Nice Figure](https://i.stack.imgur.com/LEb23.png)
Однако функция сохранения внизу этого всплывающего окна не всегда работает, и я бы предпочел создать красивую фигуру в своем коде, которую я отправляю в функцию plt.savefig()
.
Во всех моих поисках я вижу, что tight_layout
рекомендуется как исправление. Проблема в том, что он регулирует размеры моего графика, а не расстояние между графиками, поэтому мои заголовки перекрываются, и мои данные не так заметны: ![booo tight_layout](https://i.stack.imgur.com/NUDsh.png)
Я также пытался constrained_layout()
с нулевым успехом
Я действительно надеюсь, что есть очевидное решение, которое мне не хватает, поскольку снимки экрана сюжета на самом деле не работают для меня.
eq_csv = r'/here/is/the/file.csv'
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
eq_df = pd.read_csv(eq_csv)
eq_data = eq_df[['LON', 'LAT', 'DEPTH', 'MAG']] # retrieve only the columns I need
eq_data = eq_data.sort_values(['MAG'], ascending=False)
# Get the NSEW boundaries and the Magnitude min and max
nbound = max(eq_data.LAT) + 0.05
sbound = min(eq_data.LAT) - 0.05
ebound = max(eq_data.LON) + 0.01
wbound = min(eq_data.LON)
xlimit = (wbound, ebound)
ylimit = (sbound, nbound)
magmin = min(eq_data.MAG)
magmax = max(eq_data.MAG)
# Loop through depth slices and create a 4 x 4 figure of subplots
fig, axes = plt.subplots(4,4)
for ax in axes.flat:
for n in list(range(1, 17)):
km = eq_data[(eq_data.DEPTH > n - 1) & (eq_data.DEPTH <= n)]
km = km.sort_values(['MAG'], ascending=True)
plt.subplot(4, 4, n) # plot a 4x4 sub plot at the nth location
scatter = plt.scatter(km["LON"], km['LAT'], s=10, c=km['MAG'], vmin=magmin, vmax=magmax, alpha = 0.5)
plt.ylim(sbound, nbound)
plt.xlim(wbound, ebound)
plt.tick_params(axis='both', which='major', labelsize=4)
plt.yticks(rotation = 90)
plt.ylabel('Latitude', rotation = 90, size = 6)
plt.xlabel('Longitude', size = 6)
plt.subplots_adjust(hspace=0.65, wspace=0.25)
plt.gca().set_title('Depth = ' + str(n - 1) + 'km to ' + str(n) + 'km', size=8, fontweight = 'bold') # set title of subplots
plt.suptitle('Magnitude of Events at Different Depth Slices, 1950 to Today', size = 20, fontweight = 'bold')
plt.tight_layout()
fig.subplots_adjust(right=0.8) #adust location of plot
cbar_ax = fig.add_axes([0.85, 0.15, 0.01, 0.7]) #location of color bar
cbar = fig.colorbar(scatter, cax=cbar_ax)
cbar.set_alpha(1)
cbar.set_label('Magnitude', rotation = 270, labelpad = 10)
cbar.draw_all()
plt.show()
plt.savefig('save/location')