一、在地图上画点,将经纬度标记在地图上。
1、平铺
def plot_ducts_points(csv_path,point_color,save_path):
lon = []
lat = []
csv_reader = csv.reader(open(csv_path, encoding='utf-8'))
for row in csv_reader:
lon.append(eval(row[1]))
lat.append(eval(row[2]))
map = Basemap(resolution='l', projection='robin', lat_0=0, lon_0=0)
map.drawmapboundary(fill_color='#6994C9')
map.fillcontinents(color='#D5D5D5', lake_color='#98D4EC')
map.drawmeridians(range(-180, 180, 60), labels=[0, 0, 0, 1], fontsize=6)
map.drawparallels(range(-90, 90, 30), labels=[1, 0, 0, 0], fontsize=6)
map.drawcoastlines()
x, y = map(lon, lat)
# cm = plt.cm.get_cmap('Reds')
plt.scatter(x, y, 3, c= point_color,marker='D')
plt.savefig(save_path, dpi=600)
示意图如下:
2、北极
map = Basemap(resolution='l', projection='npstere', boundinglat=66, lon_0=0)
其中projection = 'npstere' 为北极地区
def plot_ducts_points_Arctic(csv_path, point_color, save_path):
lon = []
lat = []
csv_reader = csv.reader(open(csv_path, encoding='utf-8'))
for row in csv_reader:
if eval(row[1])>=66.34:
lon.append(eval(row[0]))
lat.append(eval(row[1]))
map = Basemap(resolution='l', projection='npstere', boundinglat=66, lon_0=0)
map.drawmapboundary(fill_color='#6994C9')
map.fillcontinents(color='#D5D5D5', lake_color='#98D4EC')
map.drawmeridians(np.arange(0, 360, 30), labels=[True, True, False, False], fontsize=8, latmax=90)
map.drawparallels(np.arange(60, 90, 10), labels=[False, False, True, False], fontsize=8)
# map.drawmeridians(range(-180, 180, 60), labels=[0, 0, 0, 1], fontsize=8)
# map.drawparallels(range(-90, 90, 30), labels=[1, 0, 0, 0], fontsize=8)
map.drawcoastlines()
x, y = map(lon, lat)
# cm = plt.cm.get_cmap('Reds')
plt.scatter(x, y, 4, c=point_color, marker='D')
plt.savefig(save_path, dpi=600)
示意图如下:
3、南极
map = Basemap(resolution='l', projection='spstere', boundinglat =-60, lon_0=0)
其中projection='spstere'为南极地区
def plot_ducts_points_Antarctic(csv_path, point_color, save_path):
lon = []
lat = []
csv_reader = csv.reader(open(csv_path, encoding='utf-8'))
for row in csv_reader:
if eval(row[1]) <= -60:
lon.append(eval(row[0]))
lat.append(eval(row[1]))
map = Basemap(resolution='l', projection='spstere', boundinglat =-60, lon_0=0)
map.drawmapboundary(fill_color='#6994C9')
map.fillcontinents(color='#D5D5D5', lake_color='#98D4EC')
map.drawmeridians(np.arange(0, 360, 30), labels=[True, True, False, False], fontsize=8, latmax=90)
map.drawparallels(np.arange(-90, 90, 30), labels=[False, False, True, False], fontsize=8)
# map.drawmeridians(range(-180, 180, 60), labels=[0, 0, 0, 1], fontsize=8)
# map.drawparallels(range(-90, 90, 30), labels=[1, 0, 0, 0], fontsize=8)
map.drawcoastlines()
x, y = map(lon, lat)
# cm = plt.cm.get_cmap('Reds')
plt.scatter(x, y, 4, c=point_color, marker='D')
plt.savefig(save_path, dpi=600)
示意图如下:
二、 在地图上将某个变量进行标注(如高度)
def plot_hb(csv_path,save_path):
# 使用open函数打开csv文件再通过reader()方法将其转为可被识别的python对象
csv_reader=csv.reader(open(csv_path,encoding='utf-8'))
# 这里的输出是逐行的循环输出.
lon=[]
lat=[]
Msl_alt = []
for row in csv_reader:
lon.append(eval(row[1]))
lat.append(eval(row[2]))
Msl_alt.append(eval(row[3]))
# 创建地图对象
map = Basemap(projection='robin', lon_0=0, resolution='c')
# 转换经纬度到地图坐标系
x, y = map(lon, lat)
# 绘制地图
map.drawmapboundary(fill_color='#6994C9')
map.fillcontinents(color='#D5D5D5', lake_color='#98D4EC')
# 标注经纬度
# 参数解释:longitude, latitude, s, fontsize
map.drawmeridians(range(-180, 180, 60), labels=[0, 0, 0, 1], fontsize=6)
map.drawparallels(range(-90, 90, 30), labels=[1, 0, 0, 0], fontsize=6)
map.scatter(x, y, c = Msl_alt, cmap='gnuplot', marker='o',s = 4, alpha=1)
plt.colorbar(label='Vertical Height of the Troposphere(km)')
plt.title("Duct_hb")
plt.savefig(save_path, dpi=600)
示意图如下: