请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12623|回复: 5

[求助] 求大家帮忙看看我的shapefile为什么加载不出来

[复制链接]

新浪微博达人勋

发表于 2020-9-28 10:21:19 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
代码如下,我理解的是先读出nc文件中的变量情况,然后加载shapefile后把区域尺度缩小到湖北省的。但是套用CSDN下的案例,没有画出湖北省市界,请各位小伙伴和前辈帮忙指正下哪里出现了问题。附件为出图情况
import netCDF4 as nc
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from mpl_toolkits.basemap import Basemap
import numpy as np

#nc,提变量
plt.rc('font',family='Times New Roman',size=16)# 全局字体为新罗马
obj=nc.Dataset('simulation\\data_201501.nc')
sn=obj.variables['sn']
se=obj.variables['se']
lats=obj.variables['lat'][:];lons=obj.variables['lon'][:]
zong=obj.variables['2015_01'][1,3,::,::]

# Plot Data
fig, ax = plt.subplots()#figure为画布,axes为绘图区
m = Basemap(projection='cyl',resolution='i',llcrnrlon=lons.min(),llcrnrlat=lats.min(),
urcrnrlon=lons.max(),urcrnrlat=lats.max(),lon_0=120.,lat_0=90)
# 网格化经纬度并形成坐标矩阵
lon, lat = np.meshgrid(lons, lats) #meshgrid是一个numpy函数,把两个数组转化为一个矩阵。

#加海岸线,国境线,洲际线
m.drawcoastlines()
m.drawstates()
m.drawcountries()

# 添加shape文件
shp_info3 = m.readshapefile("CHN_adm_shp\\CHN_adm3",'states',drawbounds=False,linewidth = 0.4,zorder=10)
for info, shp in zip(m.states_info, m.states):
proid = info['NAME_1'] # 可以用notepad打开CHN_adm1.csv文件,可以知道'NAME_1'代表各省的名称
if proid == 'Hubei':
poly = Polygon(shp,facecolor='None',edgecolor='b', lw=0.8)
ax.add_patch(poly)
else:
poly = Polygon(shp,facecolor='w',edgecolor='w', lw=0.8)
ax.add_patch(poly)

# 市一级底图
shp_info2 = m.readshapefile("CHN_adm_shp\\CHN_adm2",'states',drawbounds=False,linewidth = 0.4,zorder=10)
for info, shp in zip(m.states_info, m.states):
proid = info['NAME_1']
if proid == 'Hubei':
poly = Polygon(shp,facecolor='None',edgecolor='black', lw=0.8)
ax.add_patch(poly)
cs = m.contourf(lon, lat, np.squeeze(zong),  cmap='rainbow')#rainbow
# Add Colorbar
cbar = m.colorbar(cs, location='bottom', pad="10%")

plt.show()
111.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-10-12 21:44:09 | 显示全部楼层
m.basemap里填一个ax=ax,试试?
另外,basemap自带的drawcountries函数用的地图文件是有问题的,图里没有藏南。建议用完整的中国领土底图文件。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-10-13 10:02:44 | 显示全部楼层
平流层的萝卜 发表于 2020-10-12 21:44
m.basemap里填一个ax=ax,试试?
另外,basemap自带的drawcountries函数用的地图文件是有问题的,图里没有 ...

哇 萝卜大神回复我了!!! 激动!! 我现已解决 发现是缩进的问题 导致我的条件语句没有读进去 ,所以您的意思,如果画国界情况的话,最好就是 读正确的shape文件 而不用 basemap自带的函数对吧
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-10-13 12:23:11 | 显示全部楼层
小小白轩轩 发表于 2020-10-13 10:02
哇 萝卜大神回复我了!!! 激动!! 我现已解决 发现是缩进的问题 导致我的条件语句没有读进去 ,所以您 ...

大神不敢,承蒙抬举!!!解决就好,这种写法还是挺新颖,以前我都是单独读shp文件。Basemap里自带的countries,没有台湾和藏南,肉眼可见这些。论坛里有准确的完整中国shp文件,可以搜一下。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-10-13 14:28:40 | 显示全部楼层
平流层的萝卜 发表于 2020-10-13 12:23
大神不敢,承蒙抬举!!!解决就好,这种写法还是挺新颖,以前我都是单独读shp文件。Basemap里自带的countri ...

这种写法也是在CSDN上模仿另外一个前辈写的,传送门:https://blog.csdn.net/zhanling_x ... 8#comments_13329180
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-10-13 14:41:27 | 显示全部楼层
小小白轩轩 发表于 2020-10-13 14:28
这种写法也是在CSDN上模仿另外一个前辈写的,传送门:https://blog.csdn.net/zhanling_xia/article/detai ...

谢谢分享,学习了!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表