central_longitude=180 时无法在右侧显示 0 刻度
can't show 0 tick in right when central_longitude=180
当其他条件如+180 和-180 时,它会转正。
当0应该在右边时,它没有出现。
没有正确的0,网站的结果是一样的
https://scitools.org.uk/cartopy/docs/latest/gallery/tick_labels.html?highlight=tick
我已经阅读了geoaxes的代码并尝试了另一种方法来在右边显示0。
如果使用matplotlib方法结果更错误。
如果使用 Cartopy 地图网格线和刻度标签,结果是一样的。
#===================================================
#plot the world map central 180
#===================================================
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
def make_map(scale):
fig=plt.figure(figsize=(8, 10))
ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
ax.set_global()
land = cfeature.NaturalEarthFeature('physical', 'land', scale,edgecolor='face',
facecolor=cfeature.COLORS['land'])
ax.add_feature(land, facecolor='0.75')
ax.coastlines(scale)
#===set tick
ax.set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree())
ax.set_yticks([-90, -60, -30, 0, 30, 60, 90], crs=ccrs.PlateCarree())
lon_formatter = LongitudeFormatter(zero_direction_label=False)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)
#=====set grid
#gl = ax.gridlines()
ax.grid()
return fig,ax
fig,ax=make_map(scale='110m')
如何让 0 显示在轴的右侧?
对我来说,看起来应该出现在右边的零也出现在左边;请注意那个滴答标签是如何比其他标签更大胆的?!
原因似乎是 360 % 360 == 0,所以刻度围绕着开始。
一个解决方法是将最后一个刻度稍微移动一下,比如
[0, 60, 120, 180, 240, 300, 359.9999999999]
或
[0, 60, 120, 180, -120, -60, -1e-10]
示例:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
def make_map(scale):
fig=plt.figure(figsize=(8, 6))
ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
ax.set_global()
land = cfeature.NaturalEarthFeature('physical', 'land', scale,edgecolor='face',
facecolor=cfeature.COLORS['land'])
ax.add_feature(land, facecolor='0.75')
ax.coastlines(scale)
ax.set_xticks([0, 60, 120, 180, 240, 300, 359.9999999999], crs=ccrs.PlateCarree())
ax.set_yticks([-90, -60, -30, 0, 30, 60, 90], crs=ccrs.PlateCarree())
lon_formatter = LongitudeFormatter(zero_direction_label=True)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)
ax.grid()
return fig,ax
fig,ax=make_map(scale='110m')
plt.show()
当其他条件如+180 和-180 时,它会转正。 当0应该在右边时,它没有出现。
没有正确的0,网站的结果是一样的
https://scitools.org.uk/cartopy/docs/latest/gallery/tick_labels.html?highlight=tick
我已经阅读了geoaxes的代码并尝试了另一种方法来在右边显示0。
如果使用matplotlib方法结果更错误。
如果使用 Cartopy 地图网格线和刻度标签,结果是一样的。
#===================================================
#plot the world map central 180
#===================================================
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
def make_map(scale):
fig=plt.figure(figsize=(8, 10))
ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
ax.set_global()
land = cfeature.NaturalEarthFeature('physical', 'land', scale,edgecolor='face',
facecolor=cfeature.COLORS['land'])
ax.add_feature(land, facecolor='0.75')
ax.coastlines(scale)
#===set tick
ax.set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree())
ax.set_yticks([-90, -60, -30, 0, 30, 60, 90], crs=ccrs.PlateCarree())
lon_formatter = LongitudeFormatter(zero_direction_label=False)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)
#=====set grid
#gl = ax.gridlines()
ax.grid()
return fig,ax
fig,ax=make_map(scale='110m')
如何让 0 显示在轴的右侧?
对我来说,看起来应该出现在右边的零也出现在左边;请注意那个滴答标签是如何比其他标签更大胆的?!
原因似乎是 360 % 360 == 0,所以刻度围绕着开始。
一个解决方法是将最后一个刻度稍微移动一下,比如
[0, 60, 120, 180, 240, 300, 359.9999999999]
或
[0, 60, 120, 180, -120, -60, -1e-10]
示例:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
def make_map(scale):
fig=plt.figure(figsize=(8, 6))
ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
ax.set_global()
land = cfeature.NaturalEarthFeature('physical', 'land', scale,edgecolor='face',
facecolor=cfeature.COLORS['land'])
ax.add_feature(land, facecolor='0.75')
ax.coastlines(scale)
ax.set_xticks([0, 60, 120, 180, 240, 300, 359.9999999999], crs=ccrs.PlateCarree())
ax.set_yticks([-90, -60, -30, 0, 30, 60, 90], crs=ccrs.PlateCarree())
lon_formatter = LongitudeFormatter(zero_direction_label=True)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)
ax.grid()
return fig,ax
fig,ax=make_map(scale='110m')
plt.show()