爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5162|回复: 8

[作图] 求助画图

[复制链接]
回帖奖励 18 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次

新浪微博达人勋

发表于 2022-8-21 18:30:00 | 显示全部楼层 |阅读模式

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

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

x
大佬们好,求助。我做这个投影图遇到一个问题。就是我这个图的数据经度是0-357.5(间隔2.5),然后纬度是0-90。由于经度不是到360这个数字,所以图形上空白了一部分,缺了这一小部分。就是想请教您们,如何把经度为0的值赋给经度为360的,怎么利用代码把这一部分添加上。数据文件有点大,上传不了。import matplotlib.pyplot as plt
import matplotlib as mpl
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from netCDF4 import Dataset
import numpy as np
import xarray as xr
def make_map(ax):
    projection = ccrs.Orthographic(central_longitude=-90,central_latitude=90)
    ax.set_global()
    ax.coastlines(linewidth=0.5)
    '''标注坐标轴'''
    '''zero_direction_label=True 有度的标识,False则去掉'''
    lon_formatter = LongitudeFormatter(zero_direction_label=True)
    lat_formatter = LatitudeFormatter()
    '''添加网格线'''
    return ax
data=xr.open_dataset(r'D:\o3 model data\tggo3.cam2.h1.2019-11-01-00000.nc')
time=data['time'][1]
lev=data['lev'][51]
lat = data['lat'][:]
lon = data['lon'][:]
T=data['T'].loc[time,lev,:,:]
data_proj = ccrs.PlateCarree(central_longitude=0)
fig = plt.figure(dpi=1200)
proj = ccrs.Orthographic(central_longitude=0,central_latitude=90)
ax = fig.add_subplot(projection = proj)
ax = make_map(ax)
cf = ax.contourf(lon, lat, T, cmap='Spectral_r',transform=data_proj)
plt.show()



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

新浪微博达人勋

 楼主| 发表于 2022-8-21 18:33:42 来自手机 | 显示全部楼层
图是这样的,下方空白了一小部分

                               
登录/注册后可看大图
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-8-21 20:06:25 | 显示全部楼层

回帖奖励 +1 金钱

试试这个?
from cartopy.util import add_cyclic_point
T, lon = add_cyclic_point(T, lon)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-8-21 22:40:29 | 显示全部楼层

回帖奖励 +1 金钱

虽然是全球数据,但是采用极射赤面投影在绘制过程中需要插值到0度线,需要采用add_cyclic_point函数,楼上是正解
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-8-21 22:48:22 来自手机 | 显示全部楼层
SolaProject 发表于 2022-08-21 20:06
试试这个?
from cartopy.util import add_cyclic_point
T, lon = add_cyclic_point(T, lon)

感谢,

                               
登录/注册后可看大图
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-8-21 23:31:17 来自手机 | 显示全部楼层
你是最美七月天 发表于 2022-08-21 22:40
虽然是全球数据,但是采用极射赤面投影在绘制过程中需要插值到0度线,需要采用add_cyclic_point函数,楼上是正解

感谢

                               
登录/注册后可看大图
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-8-22 20:31:56 来自手机 | 显示全部楼层
SolaProject 发表于 2022-08-21 20:06
试试这个?
from cartopy.util import add_cyclic_point
T, lon = add_cyclic_point(T, lon)

请问您知道如果想画40-90纬度的,经度不变0-360,这样区域的地图,可以怎么修改代码吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-8-24 00:18:43 | 显示全部楼层
易烊启迪 发表于 2022-8-22 20:31
请问您知道如果想画40-90纬度的,经度不变0-360,这样区域的地图,可以怎么修改代码吗?

我也不太了解,不咋画这种图,不过用这个投影应该差不多,算了下差不多这个距离:
projection = ccrs.NearsidePerspective(central_longitude=0.0, central_latitude=90, satellite_height=1945746, false_easting=0)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-8-24 15:01:52 来自手机 | 显示全部楼层
SolaProject 发表于 2022-08-24 00:18
我也不太了解,不咋画这种图,不过用这个投影应该差不多,算了下差不多这个距离:
projection = ccrs.NearsidePerspective(central_longitude=0.0, central_latitude=90, satellite_height=1945746, false_easting=0)

好的感谢

                               
登录/注册后可看大图
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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