Matplotlib: Inset plot within Basemap

筅森魡賤 提交于 2020-01-06 07:58:49

问题


I'm attempting to inset a line graph within the lower right-hand corner of a Basemap plot, but the code I'm using (based off the Matplotlib documentation) is not working for me, probably because it includes no Basemap arguments. Instead, I keep getting a figure that looks like this:

Below is the code I've used to try and create my figure. Any help on getting the line graph inside the graph would be extremely helpful. Thanks in advance!

fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(121)
m = Basemap(llcrnrlon=50.,llcrnrlat=35.,urcrnrlon=160.,urcrnrlat=63.,projection='lcc',resolution='c',lat_1=20.,lat_2=40.,lon_0=90.,lat_0=50.)
m.drawcountries(color='black')
m.drawmapboundary(fill_color='lightblue')
m.fillcontinents(color='beige')
m.drawparallels(np.arange(0.,90.,5.),color='gray',dashes=[1,3],labels=[1,0,0,0])
m.drawmeridians(np.arange(0.,360.,15.),color='gray',dashes=[1,3],labels=[0,0,0,1])

clat = np.arange(65,45,-2)
clon = np.arange(80,100,2)
dlat = np.arange(70,50,-2)
dlon = np.arange(85,105,2)
mincon = np.random.randint(900,1000,73)
mindis = np.random.randint(910,1010,73)


cX,cY = m(clon,clat)
dX,dY = m(dlon,dlat)
m.plot(cX,cY,'bo-',label='Continuous')
m.plot(dX,dY,'ro-',label='Discontinuous') 
ax.legend()

a = plt.axes([0.7,0.3,.2,.2])
plt.plot(np.arange(0,73,1),mincon,color='blue',label='Continuous')
plt.plot(np.arange(0,73,1),mindis,color='red',label='Discontinuous')
plt.xlabel('Model Time')
plt.ylabel('Minimum Pressure (hPa)')

plt.show() 

回答1:


I'd use an mpl_toolkits.axes_grid1.inset_locator.inset_axes.

import numpy as np
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt


fig = plt.figure(figsize=(10,6))
ax = fig.add_subplot(111)

m = Basemap(llcrnrlon=50.,llcrnrlat=35.,urcrnrlon=160.,urcrnrlat=63.,
            projection='lcc',resolution='c',lat_1=20.,lat_2=40.,lon_0=90.,lat_0=50., ax=ax)
m.drawcountries(color='black')
m.drawmapboundary(fill_color='lightblue')
m.fillcontinents(color='beige')
m.drawparallels(np.arange(0.,90.,5.),color='gray',dashes=[1,3],labels=[1,0,0,0])
m.drawmeridians(np.arange(0.,360.,15.),color='gray',dashes=[1,3],labels=[0,0,0,1])

clat = np.arange(65,45,-2)
clon = np.arange(80,100,2)
dlat = np.arange(70,50,-2)
dlon = np.arange(85,105,2)
mincon = np.random.randint(900,1000,73)
mindis = np.random.randint(910,1010,73)


cX,cY = m(clon,clat)
dX,dY = m(dlon,dlat)
m.plot(cX,cY,'bo-',label='Continuous')
m.plot(dX,dY,'ro-',label='Discontinuous') 
ax.legend(loc="lower left")

ax2 = inset_axes(ax, "30%", "40%", loc="lower right")
ax2.plot(np.arange(0,73,1),mincon,color='blue',label='Continuous')
ax2.plot(np.arange(0,73,1),mindis,color='red',label='Discontinuous')
ax2.set_xlabel('Model Time')
ax2.set_ylabel('Minimum Pressure (hPa)')
ax2.xaxis.set_ticks_position('top')
ax2.xaxis.set_label_position('top') 

plt.show() 



来源:https://stackoverflow.com/questions/55069984/matplotlib-inset-plot-within-basemap

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!