我尝试使用Cartopy生成一个正交图。我基本上让整个东西完全按照我想要的方式工作.除了经度网格线上的标签。虽然经度的约定通常是使用0 - 180 E或0 - 180 W,但其他物体的约定有时可以是0 - 360度。我想坚持后一种约定,在我接下来的工作中与经度约定保持一致。
我的问题是,LongitudeFormatter似乎没有任何选项允许我简单地绘制具有0 - 360标签的经度网格线。文档确实给予了如何使用PlateCarree(此处)完成此操作的示例,但我使用的是正交投影,尝试应用给定示例只是告诉我“此格式化程序不能用于非矩形投影。”话虽如此,LongitudeFormatter在其他方面似乎完全可以与正交投影一起工作?
这里有一个简单的例子来证明我的问题。
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.mpl.ticker import (LongitudeFormatter, LatitudeFormatter,
LongitudeLocator,LatitudeLocator)
plotproj = ccrs.Orthographic(central_longitude=90, central_latitude=45)
mgeodetic = ccrs.Geodetic()
fig1,ax1 = plt.subplots(1,1,figsize=(10.0,10.0),constrained_layout=True,
subplot_kw={"projection":plotproj})
ax1.set_global()
#grid lines
longlocs = [0,30,60,90,120,150,180,210,240,270,300,330,360]
gl = ax1.gridlines(draw_labels=True,x_inline=True,
xpadding=0,ypadding=0,xlocs=longlocs)
gl.top_labels = False
gl.left_labels = False
gl.xlocator = LongitudeLocator(nbins=12)
gl.ylocator = LatitudeLocator(nbins=12)
gl.xformatter = LongitudeFormatter(auto_hide=False)
gl.yformatter = LatitudeFormatter(auto_hide=False)
ax1.invert_xaxis() #makes longitude run the opposite direction, necessary for my use case
此示例生成下图:
我已经尝试了LongitudeFormatter的可用选项。direction_label = False
只是让经度从0到180和-180到0运行。dateline_direction_label
和zero_direction_label
只影响0和180子午线。cardinal_labels
是为了替换现有的E和W标签,但不影响值。
我觉得我一定是忽略了一些明显的东西-我如何绘制0到360经度标签?
1条答案
按热度按时间eanckbw91#
下面给出的代码应该可以做到这一点。
把它放在
ax1.invert_xaxis()
线之前。