我通过底图绘制了一张Map,如下所示:
plt.figure(figsize=(7,6))
m = Basemap(projection='cyl',llcrnrlat=40.125,urcrnrlat=44.625,\
llcrnrlon=-71.875,urcrnrlon=-66.375,resolution='h')
m.drawparallels(np.arange(int(40.125),int(44.625),1),labels=[1,0,0,0])
m.drawmeridians(np.arange(int(-71.875),int(-66.375),1),labels=[0,0,0,1])
m.drawcoastlines()
m.fillcontinents(color='grey')
m.drawmapboundary()
图片如下:
如何删除实际的纬度/经度线,同时保持轴上的刻度?
4条答案
按热度按时间iklwldmw1#
这可以通过将
linewidth
参数设置为零轻松实现wmtdaxz32#
在
basemap
中,您可以设置suppress_ticks=False
,并获得没有线条的刻度。bjp0bcyl3#
我发现底图刻度设置非常混乱。
下图显示了8种不同的设置。一些符号:
ST=T
:suppress_ticks=True
。ST=F
:suppress_ticks=False
。DP-DR
:drawparallels()
和drawmeridians()
。DP-DR(LW=0)
:drawparallels(...,linewidth=0)
和drawmeridians(...,linewidth=0)
。mill
:米勒Map投影。解释顶部面板中的结果:
suppress_ticks=True
(默认值)和drawparallels()
以及drawmeridians()
。linewidth=0
设置为drawparallels()
,drawmeridians()
删除网格线,但不添加刻度。请注意,问题的标题是“如何删除实际的纬度/经度线,同时保持刻度在轴上”。suppress_ticks=False
不会删除网格线,而是添加了一组额外的刻度线。这就是为什么suppress_ticks
默认为True
。linewidth=0
实际上是删除网格线。同样,suppress_ticks=False
引入了额外的刻度,它们与drawparallels()
和drawmeridians()
添加的刻度重叠。第二组:
drawparallels()
和drawmeridians()
,让它自动添加刻度,会怎么样?第一个缺点是你不能控制要添加的滴答声。另一个是刻度标签的格式没有W/E
,N/S
符号(如果您将labelstyle='+/-'
添加到drawparallels()
或drawmeridians()
,标签将使用+ 41^{\circ}
)。还有一个很大的缺点,如(f)所示。mill
Map投影而不是cyl
。请注意,自动标注使用米作为单位,而不是纬度/经度。不好(至少在这种情况下)。ax.set_xticks(lon_ticks)
和ax.set_yticks(lat_ticks)
。将添加刻度,但标签重叠。mill
投影提出的解决方案:最后,创建图形的脚本:
更新:我在使用
drawparallels(..., linewidth=0)
和drawmeridians(..., linewidth=0)
时,保存的PDF文件出现了一些问题。更多细节请参见https://github.com/matplotlib/basemap/issues/493。如果您遇到类似的问题,请考虑使用
drawparallels(..., zorder=-2)
。tvmytwxo4#
您可以删除网格线,同时保留标签和刻度线,通过使用
dashes=[dash_length,dash_spacing]
选项,这实际上是用于设置破折号长度和间距。将间距值设置为大于体形大小的值,如下所示。Example figure with ticks and labels