爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 26402|回复: 23

[求助] python cartopy画图

[复制链接]

新浪微博达人勋

发表于 2019-8-19 20:16:13 | 显示全部楼层 |阅读模式

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

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

x
求助,用cartopy画图,想画120E-0°范围的,应该怎么设置呢?帮帮孩子!!谢谢大家

projection = ccrs.PlateCarree()

ax.set_extent((120, 0, -20, 80),crs=projection)
ax.coastlines(linewidth=1.5)
ax.set_xticks([120,150,180,-150,-120,-90, -60, -30, 0], crs=projection)
ax.set_yticks(np.arange(-20.,81.,20.), crs=projection)

sst.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-8-20 19:50:47 | 显示全部楼层
本帖最后由 忽如一夜春风来 于 2019-8-20 21:00 编辑
fey 发表于 2019-8-20 19:29
你的这个语句范围是从-180到180的,我想要的是从东经120°到西经30°(就是120到-30?),我不知道怎么设 ...

我用cartopy的程序,画图部分修改成你需要的大概是:
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter

……

fig = plt.figure(figsize=(16, 9))

map = plt.axes(projection=ccrs.PlateCarree(central_longitude=180)) #以180°为中心
map.set_extent([120,330,-20,80],crs=ccrs.PlateCarree())  # 120E ~30W
map.set_xticks(np.arange(120,331,30),crs=ccrs.PlateCarree())  
map.set_yticks(np.arange(-20,81,20),crs=ccrs.PlateCarree())
map.grid(linestyle = ":",color='black')

map.add_feature(cfeature.BORDERS.with_scale('50m'))
map.add_feature(cfeature.OCEAN)
map.add_feature(cfeature.COASTLINE.with_scale('50m'))


111.png
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-8-19 20:45:55 | 显示全部楼层
填色的那个语句里,transform关键字里加上中心经度试试
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-20 10:41:07 | 显示全部楼层
好久不见 发表于 2019-8-19 20:45
填色的那个语句里,transform关键字里加上中心经度试试

D:\work_py\sst.png

加了这句
transform=ccrs.PlateCarree(central_longitude=-120)
也不行,地图是变位置了,但是地图跟填色图位置不一致了
sst.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-20 14:38:49 | 显示全部楼层
我一般用的是,
#map.drawcoastlines(color='black')
map = plt.axes(projection=ccrs.PlateCarree())
map.set_extent([-180,180,-90,90],crs=ccrs.PlateCarree())
map.set_xticks(np.arange(-180,180,20),crs=ccrs.PlateCarree())
map.set_yticks(np.arange(-90,90,10),crs=ccrs.PlateCarree())

你可以试一下。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-20 14:41:10 | 显示全部楼层
我觉得是这句,ax.set_xticks([120,150,180,-150,-120,-90, -60, -30, 0], crs=projection)  你坐标轴刻度超过0~120°范围了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-20 19:29:10 | 显示全部楼层
本帖最后由 fey 于 2019-8-20 19:32 编辑
忽如一夜春风来 发表于 2019-8-20 14:41
我觉得是这句,ax.set_xticks([120,150,180,-150,-120,-90, -60, -30, 0], crs=projection)  你坐标轴刻度 ...

你的这个语句范围是从-180到180的,我想要的是从东经120°到西经30°(就是120到-30?),我不知道怎么设置
这是我用basemap画的图
(设置是这样的map.drawmeridians(np.arange(120,361,30.),labels=[0,0,0,1],fontsize=12)
                       map.drawparallels(np.arange(-20.,81.,20.),labels=[1,0,0,0],fontsize=12)  ),
我想用cartopy画出相同的区域范围,但是cartopy的设置好像有点不一样,不知道该如何设置
slp.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-20 20:08:47 | 显示全部楼层
本帖最后由 fey 于 2019-8-20 20:10 编辑
忽如一夜春风来 发表于 2019-8-20 19:50
我用cartopy的程序是下面这样:

不好意思,看不到你发的内容
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-20 20:51:37 | 显示全部楼层
fey 发表于 2019-8-20 20:08
不好意思,看不到你发的内容

补充了在上面。刚发现没发出来
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-8-20 21:18:29 | 显示全部楼层
本帖最后由 fey 于 2019-8-20 21:19 编辑
忽如一夜春风来 发表于 2019-8-20 20:51
补充了在上面。刚发现没发出来

十分感谢!!!!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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