定义墨盒上的墨卡托投影的纵向范围

时间:2017-04-27 02:14:04

标签: python matplotlib jupyter-notebook cartopy

我试图绘制一些作为矩阵存在的数据,例如温度。这些数据是区域性的,因此我不需要全球地图。

我有:

  1. 数据矩阵(mxn)
  2. 定义纬度(mx1)和经度(nx1)的矢量
  3. 我想用墨卡托投影的纸币绘制它。但是,mercator只允许我定义最小和最大lat,而不是min和max lon。这最终给了我一片宽阔的土地。

    C = pi;
    A = pi;
    B = pi;
    Z = [cos(C),-sin(C),0; sin(C),cos(C),0; 0,0,1];
    X = [1,0,0;0,cos(A),-sin(A);0,sin(A),cos(A)];
    Y = [cos(B),0,sin(B);0,1,0;-sin(B),0,cos(B)];
    R =(X*Y)*Z;
    yaw=atan2(R(2,1),R(1,1))
    pitch=atan2(-R(3,1),sqrt(R(3,2)^2+R(3,3)^2))
    roll=atan2(R(3,2),R(3,3))
    

    我如何设置沿海地图的最小和最大经度? 最后,我只想绘制我的数据,覆盖在国家边界上,就像使用ncview一样。

1 个答案:

答案 0 :(得分:2)

您通常不会在选择投影时设置地图的范围,您可以稍后使用您创建的轴的set_extent方法进行设置。实际上,cartopy中的默认行为是使范围适合绘制的数据,因此您应该使用正常墨卡托投影创建绘图时发生的情况。以下是在地理坐标中明确设置范围的示例:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

# Create Mercator projection with dateline in the middle:
ax = plt.axes(projection=ccrs.Mercator(central_longitude=180))
# Draw coastlines so we know where we are:
ax.coastlines()
# Set the map extent, making sure to specify the correct coordinate system
# for geographical coordinates:
ax.set_extent([90, 270, -40, 40], crs=ccrs.PlateCarree())
plt.show()