論文用の画像を作るためのテンプレートのメモ.
真ん中:世界地図,右と下:緯度・経度ごとの陸地面積.
若干枠線がズレるのはなぜ?
map_right_bottom.py
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
from mpl_toolkits.basemap import Basemap
north, south, dlat = 90.0, -60.0, 30.0
east , west , dlon = 180.0, -180.0, 60.0
def gen_axes(figWidth=10.0, rightWidth=4.0, bottomHeight=2.5):
'''
center|right
------
bottom
'''
centerWidth = figWidth - rightWidth
centerHeight = centerWidth * (north - south) / (east - west)
figHeight = centerHeight + bottomHeight
fig = plt.figure(figsize=(figWidth, figHeight))
gs = GridSpec(2, 2,
width_ratios=(centerWidth,rightWidth), height_ratios=(centerHeight,bottomHeight),
wspace=0.0, hspace=0.0)
return [plt.subplot(gs[0,0]), plt.subplot(gs[0,1]), plt.subplot(gs[1,0])] # center, right, bottom
def center_map(ax):
m = Basemap(llcrnrlon=west, llcrnrlat=south, urcrnrlon=east, urcrnrlat=north, ax=ax)
m.drawcoastlines(linewidth=.4)
m.fillcontinents(color='0.7')
m.drawparallels(np.arange(south+dlat,north,dlat), labels=[1,0,0,0])
m.drawmeridians(np.arange(west +dlon,east ,dlon), labels=[0,0,1,0])
return
def right_plot(ax, data):
ax.plot(data, np.arange(len(data))[::-1])
left, right = ax.get_xlim()
left = 0
ax.set_xlim(left=left, right=right)
ax.hlines(y=range(120, 720, 120), xmin=left, xmax=right, linestyles=':', linewidth=1.0)
ax.set_ylim(0, len(data))
ax.tick_params(left=False, right=False)
ax.tick_params(labelleft=False, labelright=False)
return
def bottom_plot(ax, data):
ax.plot(data)
ax.set_xlim(0, len(data))
bottom, top = ax.get_ylim()
bottom = 0
ax.set_ylim(top=top, bottom=bottom)
ax.vlines(x=range(240, 1440, 240), ymin=bottom, ymax=top, linestyles=':', linewidth=1.0)
ax.tick_params(top=False, bottom=False)
ax.tick_params(labeltop=False, labelbottom=False)
ax.set_facecolor((0.0, 0.0, 0.0, 0.0))
def main(*args):
landMap = # グリッドごとの陸地面積マップ
landMap = np.ma.masked_less_equal(landMap, 0.0)
landLat = landMap.sum(axis=1)
landLon = landMap.sum(axis=0)
axs = gen_axes()
center_map (axs[0])
right_plot (axs[1], landLat)
bottom_plot(axs[2], landLon)
plt.show()