Подгонка сюжетов, субтитров, легенды в одну фигуру БЕЗ - PullRequest
0 голосов
/ 23 января 2020

Я создаю фигуру с заголовком, 16 сюжетами и легендой. Я не могу на всю жизнь получить его, чтобы хорошо спасти. Я сделаю все возможное, чтобы объяснить свое затруднительное положение, но мой словарный запас может быть неправильным, поэтому я заранее извиняюсь.

Если я запускаю свой код (конец), я получаю следующий вывод: Bad Output one

Это не красиво, все перекрывается или обрезается. Если бы я добавил plt.savefig(), это то, что я получил.

Я могу перетащить углы всплывающего окна, и это дает мне очень красиво расположенную фигуру, и это именно то, что я хочу: Nice Figure

Однако функция сохранения внизу этого всплывающего окна не всегда работает, и я бы предпочел создать красивую фигуру в своем коде, которую я отправляю в функцию plt.savefig().

Во всех моих поисках я вижу, что tight_layout рекомендуется как исправление. Проблема в том, что он регулирует размеры моего графика, а не расстояние между графиками, поэтому мои заголовки перекрываются, и мои данные не так заметны: booo tight_layout

Я также пытался 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...