Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Cartopy';s Lambert保形并保持圆锥形外观?_Python_Matplotlib_Gis_Cartopy - Fatal编程技术网

Python 如何在Cartopy';s Lambert保形并保持圆锥形外观?

Python 如何在Cartopy';s Lambert保形并保持圆锥形外观?,python,matplotlib,gis,cartopy,Python,Matplotlib,Gis,Cartopy,我想制作一个以欧洲为中心的兰伯特圆锥曲线图。我可以做到以下几点: 将cartopy.crs导入为CCR 将matplotlib.pyplot作为plt导入 项目=ccrs.LambertConformal(中心经度=20.0,中心纬度=45.0,截止点=30) 图=plt.图(图尺寸=(10,10)) ax=图添加_子地块(111,投影=项目) 最大海岸线(分辨率=110m) plt.show() 然而,这太多地延伸到东方和西方。我想把它缩小到,比方说,10W到40E之间。如果我添加一行ax

我想制作一个以欧洲为中心的兰伯特圆锥曲线图。我可以做到以下几点:

将cartopy.crs导入为CCR
将matplotlib.pyplot作为plt导入
项目=ccrs.LambertConformal(中心经度=20.0,中心纬度=45.0,截止点=30)
图=plt.图(图尺寸=(10,10))
ax=图添加_子地块(111,投影=项目)
最大海岸线(分辨率=110m)
plt.show()

然而,这太多地延伸到东方和西方。我想把它缩小到,比方说,10W到40E之间。如果我添加一行
ax.set\u范围([-10,40,30,90],crs=ccrs.PlateCarree())
,我将失去上面绘图的圆锥“外观”:


如何在Cartopy的LambertConformal中适当减小纵向范围,并且仍然保持圆锥形外观?我可以给经度边距,让第一个数字在两个经度之间调整,而不是放在这个矩形中吗?我想象两条子午线之间有一个三角形,在纬度下限有一个拱门。

这就是你要找的吗

将cartopy.crs导入为CCR
将matplotlib.pyplot作为plt导入
将matplotlib.path导入为mpath
ax=plt.轴(投影=ccrs.lambert共形(中心经度=20.0,中心纬度=45.0))
ax.gridlines()
最大海岸线(分辨率=110m)
#Lon和Lat边界
xlim=[-10,40]
ylim=[30,90]
下拱空间=10#如果通过改变lon和lat LIM切断下拱,则需要手动增加
rect=mpath.Path([[xlim[0],ylim[0]],
[xlim[1],ylim[0]],
[xlim[1],ylim[1]],
[xlim[0],ylim[1]],
[xlim[0],ylim[0]],
]).内插(20)
proj_to_data=ccrs.PlateCarree()._as_mpl_transform(ax)-ax.transData
rect_in_target=proj_to_data.transform_path(rect)
ax.set_边界(rect_in_目标)
ax.set_范围([xlim[0],xlim[1],ylim[0]-较低的_空间,ylim[1])
改编自

输出:


这就是你要找的吗

将cartopy.crs导入为CCR
将matplotlib.pyplot作为plt导入
将matplotlib.path导入为mpath
ax=plt.轴(投影=ccrs.lambert共形(中心经度=20.0,中心纬度=45.0))
ax.gridlines()
最大海岸线(分辨率=110m)
#Lon和Lat边界
xlim=[-10,40]
ylim=[30,90]
下拱空间=10#如果通过改变lon和lat LIM切断下拱,则需要手动增加
rect=mpath.Path([[xlim[0],ylim[0]],
[xlim[1],ylim[0]],
[xlim[1],ylim[1]],
[xlim[0],ylim[1]],
[xlim[0],ylim[0]],
]).内插(20)
proj_to_data=ccrs.PlateCarree()._as_mpl_transform(ax)-ax.transData
rect_in_target=proj_to_data.transform_path(rect)
ax.set_边界(rect_in_目标)
ax.set_范围([xlim[0],xlim[1],ylim[0]-较低的_空间,ylim[1])
改编自

输出:


这太棒了!然而,它对参数很敏感。例如,如果我将经度范围稍微扩大到
xlim=[-20,60]
下拱就消失了。有办法解决这个问题吗?一个普遍的解决方案将是伟大的。我不完全理解如何从
lambertcomformal
set_extent
一起控制
cutoff
参数。您可以这样解决:
ax.set_extent([xlim[0],xlim[1],ylim[0]-20,ylim[1]])
。不确定是否有一个通用的解决方案-正如您在相关示例中看到的,这更像是一个黑客行为。太棒了,谢谢!这太棒了!然而,它对参数很敏感。例如,如果我将经度范围稍微扩大到
xlim=[-20,60]
下拱就消失了。有办法解决这个问题吗?一个普遍的解决方案将是伟大的。我不完全理解如何从
lambertcomformal
set_extent
一起控制
cutoff
参数。您可以这样解决:
ax.set_extent([xlim[0],xlim[1],ylim[0]-20,ylim[1]])
。不确定是否有一个通用的解决方案-正如您在相关示例中看到的,这更像是一个黑客行为。太棒了,谢谢!