Как мне выровнять длину оси matplotlib-basemap с другой осью субплота? - PullRequest
1 голос
/ 30 января 2020

Любая помощь с вопросом приветствуется. У меня проблема с подсюжетами при использовании базовой карты. Используя gridspe c, я создал фигуру в matplotlib, которая содержит три субплота. Я хотел бы нарисовать длины широты и долготы осей базовой карты и оси других 2-х участков так же. Но в моем текущем коде, хотя длина осей широты 2-х участков одинакова, оси долготы имеют разную длину. Как выровнять длину осей долготы базовой карты и нижнего левого квадранта? Есть ли способ выполнить sh это?

Вот мой код:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
from mpl_toolkits.basemap import Basemap

fig = plt.figure(figsize=(12,12))
gs = GridSpec(2, 2, width_ratios=[3, 1], height_ratios=[3, 1], hspace=0.1, wspace=0.1)
ax1 = fig.add_subplot(gs[0])

map1 = Basemap(projection = 'merc', resolution = 'l',
               lat_0 = 39.65, lon_0 = 27.5, area_thresh = 0.1,
               llcrnrlon = 24.75, llcrnrlat = 35.25, urcrnrlon = 31.0, urcrnrlat = 41.5, ax=ax1)
map1.fillcontinents(color = 'darkgrey', lake_color = 'lightskyblue')
map1.drawmapboundary(fill_color = 'lightskyblue')
map1.drawcoastlines(linewidth = 1.0, color = 'black')
map1.drawcountries(linewidth = 0.5, color = 'black')
ax2 = fig.add_subplot(gs[1])
ax2.set_ylim(35.25, 41.5)
ax3 = fig.add_subplot(gs[2])
ax3.set_xlim(24.75, 31)

for i, ax in enumerate(fig.axes):
        ax.tick_params(labelbottom=False, labelleft=False)
        ax.set_xlabel("")
        ax.set_ylabel("")

ax1.set_xlabel("Longitude (°)", labelpad=10)
ax1.set_ylabel("Latitude (°)", labelpad=10)
ax2.set_xlabel("Depth (km)", rotation=180, labelpad=10)
ax2.set_ylabel("Latitude (°)", labelpad=10)
ax3.set_xlabel("Longitude (°)", labelpad=10)
ax3.set_ylabel("Depth (km)", labelpad=10)

1 Ответ

0 голосов
/ 30 января 2020

Использование GridSpe c и настройка figsize=(12,12) приводит к неправильному выравниванию вспомогательных участков.

Я обнаружил, что с помощью figsize=(6.3,8.12) получился график с выровненными графиками.

fig = plt.figure(figsize = (6.3, 8.12))
gs = GridSpec(2, 2, width_ratios=[3, 1], height_ratios=[3, 1], hspace=0.2, wspace=0.2)
ax1 = fig.add_subplot(gs[0])

map1 = Basemap(projection = 'merc', resolution = 'l',
               lat_0 = 39.65, lon_0 = 27.5, area_thresh = 0.1,
               llcrnrlon = 24.75, llcrnrlat = 35.25, urcrnrlon = 31.0, urcrnrlat = 41.5, ax=ax1)
map1.fillcontinents(color = 'darkgrey', lake_color = 'lightskyblue')
map1.drawmapboundary(fill_color = 'lightskyblue')
map1.drawcoastlines(linewidth = 1.0, color = 'black')
map1.drawcountries(linewidth = 0.5, color = 'black')
ax2 = fig.add_subplot(gs[1])
ax2.set_ylim(35.25, 41.5)
ax3 = fig.add_subplot(gs[2])
ax3.set_xlim(24.75, 31)

for i, ax in enumerate(fig.axes):
        ax.tick_params(labelbottom=False, labelleft=False)
        ax.set_xlabel("")
        ax.set_ylabel("")

ax1.set_xlabel("Longitude (°)", labelpad=10)
ax1.set_ylabel("Latitude (°)", labelpad=10)
ax2.set_xlabel("Depth (km)", rotation=180, labelpad=10)
ax2.set_ylabel("Latitude (°)", labelpad=10)
ax3.set_xlabel("Longitude (°)", labelpad=10)
ax3.set_ylabel("Depth (km)", labelpad=10)

enter image description here

...