在 Cartopy 中隐藏高纬度非矩形投影的右侧轴(纬度)标签

2024-04-29

我试图使用以下命令隐藏此 Cartopy 地图中的右侧标签(又名纬度)right_labels = False但仅适用于某些值。但是,可以使用隐藏顶部/底部标签top_labels = False and bottom_label=False.

重现:


 import numpy as np
    import matplotlib.pyplot as plt
    import cartopy.crs as ccrs
    import matplotlib.ticker as mticker
    import matplotlib.path as mpath
    import cartopy.feature as cf

    """
    Plot Alaska
    """

    # Map View Using Cartopy
    fig = plt.figure(figsize=(8,6))

    xmin=-163
    xmax=-120
    ymin=50
    ymax=71

    proj = ccrs.LambertConformal(central_longitude=(xmin+xmax)/2, central_latitude=(ymin+ymax)/2)
    ax = fig.add_subplot(1, 1, 1, projection=proj)
    n = 20
    aoi = mpath.Path(
        list(zip(np.linspace(xmin, xmax, n), np.full(n, ymax))) + \
        list(zip(np.full(n, xmax), np.linspace(ymax, ymin, n))) + \
        list(zip(np.linspace(xmax, xmin, n), np.full(n, ymin))) + \
        list(zip(np.full(n, xmin), np.linspace(ymin, ymax, n)))
    )
    ax.set_boundary(aoi, transform=ccrs.PlateCarree())

    # Plot Ocean Borders
    ocean = cf.NaturalEarthFeature('physical', 'ocean', scale='50m', edgecolor='k', facecolor='lightblue', lw=1,
                                   linestyle='-')
    ax.add_feature(ocean)
    # Colored Land Background
    land = cf.NaturalEarthFeature('physical', 'land', scale='50m', facecolor='snow', lw=1, linestyle='--')
    ax.add_feature(land)

    ax.set_extent([xmin, xmax, ymin, ymax], crs=ccrs.PlateCarree())
    # Set gridlines to variable so you can manipulate them
    gl = ax.gridlines(draw_labels=True, crs=ccrs.PlateCarree(), x_inline=False, y_inline=False)
    gl.xlocator = mticker.FixedLocator([-160, -150, -140, -130, -120])
    gl.ylocator = mticker.FixedLocator([50, 55, 60, 65, 70])
    gl.top_labels = False
    gl.right_labels = False

    plt.show()

这就是我得到的:

我怀疑这与使用有关ax.set_boundary()制作地图,但在网上查看后,除了这个我找不到任何东西GitHub问题 https://github.com/SciTools/cartopy/issues/1722提到了这个问题,但它已关闭,所以我想他们已经修复了它。我正在使用 Cartopy 版本 0.21.1。

这个问题是在研究另一个 SO 问题时产生的:高纬度非矩形投影不会出现 Cartopy 标签 https://stackoverflow.com/questions/75586978/cartopy-labels-not-appearing-for-high-latitude-non-rectangular-projection(所有代码均归于@kbiegseismic https://stackoverflow.com/users/11232846/kbiegseismic).


显而易见的是ax.set_boundary()混淆了内部的过程.gridlines(),特别是在这种特殊情况下需要隐藏一些 y 标签时。因此,某些标签的可见性设置错误。

我们需要等待 Cartopy 的下一个版本才能看到更好的结果gridlines()发挥作用。如果您需要解决方法,可以尝试下面的代码片段。只需将其放在现有代码的末尾即可。

# Generate the plot to enable access to the labels' attributes
plt.draw()

# Iterate for the y-labels
# The right labels have x coordinates > 0
# The left labels < 0
for ea in gl.ylabel_artists:
    right_label = ea.get_position()[0] > 0
    # print(ea, ea.get_position()[0], ea.get_visible())
    if right_label:
        ea.set_visible(False)

plt.show()

如果您修改地图边界以具有如下所示的小型额外缓冲区:-

pg = 0.006
#xmin=-163 -pg
xmax=-120 +pg
ymin=50 -pg
#ymax=71 +pg

最终绘图将包括西经 120° 北纬 50° 处缺失的标签。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Cartopy 中隐藏高纬度非矩形投影的右侧轴(纬度)标签 的相关文章

随机推荐

  • 解码子级时访问嵌套 Codable 结构中父级结构的属性

    在嵌套中使用解码器时Codablestruct 有什么方法可以访问父结构的属性吗 我能想到的唯一可行的方法 尚未测试 是在父结构中也使用手动解码器 在userInfo字典 然后访问userInfo在子结构中 但这会产生大量样板代码 我希望有
  • 将 YYYYMMDD 字符串转换为 Snowflake 中的 YYYY-MM-DD 日期格式

    基于雪花中提到的示例文档 https docs snowflake com en sql reference functions to date html 为什么仅通过更改 ORDER BY 子句 日期和时间戳值就会返回不同的值 另外 我正
  • 这个简单的洗牌算法是否会返回一副随机洗牌的扑克牌? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 您有一个包含 52 张卡片的列表 其中列表中卡片的位置不会移动 您有第二个卡位置列表 首先 位置列表与第一个列表相同 迭代第一个列表 对于第一个列表中
  • 开始调试和附加到进程有什么区别

    当我将项目附加到我的 w3wp exe IIS 工作进程时 我的项目加载速度明显快于 开始调试 时的加载速度 但是 无论我 开始调试 还是 附加到进程 同一个工作进程似乎都在处理相同数量的模块 DLL w3wp exe 为什么附加到进程的速
  • onclick 和 href="javascript:函数名 之间有什么区别?

    有什么区别吗 1 a href Link1 a and 2 a href Link2 a 会以某种方式影响页面性能吗 如果您的元素实际上不应该将用户链接到某个地方 不要将其设为锚元素 如果您正在使用 a 标签只是为了改变下划线 光标 不要
  • Zookeeper 容错到底意味着什么?同时还是累计?

    正如 ZooKeeper 入门指南 中提到的 容错集群设置至少需要三台服务器 并且强烈建议您拥有奇数数量的服务器 所以如果我有 5 个服务器 如上所述 当其中 2 个服务器失败时我仍然可以生存 但这意味着同时或累积 那么这个怎么样 5 台服
  • pthread_create 编译返回错误

    我使用以下代码创建两个线程 header files include
  • create-react-app 中的 public/manifest.json 文件是什么?

    我知道 chrome 扩展使用 manifest json 但在这里 它也被用作其他东西 内容 short name React App name Create React App Sample icons src favicon ico
  • 如何使用必须包含空格的 title~= 进行 CSS 属性选择器? [复制]

    这个问题在这里已经有答案了 我有以下选择器 post link title Corporate 现在 我需要只选择标题仅在开头而不是标题中其他位置包含 Corporate 一词的元素 所以我有两个选择 1 创建一个仅检查标题开头的选择器 然
  • 如何在Windows平台上编写Git Server Hooks?

    我找不到任何适用于 Windows 的 Git 挂钩的明确示例 我在 Windows Server 上使用 Bonobo Git Server 我需要预提交和提交后挂钩作为 cmd 或 bat 预提交应检查空注释 提交后应发送有关提交的电子
  • Spring MVC - 从 JSP 提交对象

    我有一个显示客户列表的 JSP ArrayList searchResults 我希望能够选择其中之一 并将其 提交给 Spring MVC 控制器 但是 我似乎无法传递所选对象 只能传递它的属性 例如 customerId 我真的需要传递
  • 英特尔编译器使用错误的标头

    我试图找出为什么Intel Compiler 18 0 已安装after我的 Visual Studio 2017 安装使用的头文件MSVC 而不是它自己的 因为它会导致错误 一个简单的 include
  • Android SDK 构建工具、平台工具和工具是什么?应该使用哪个版本?

    我知道这是一个非常基本的问题 但令我惊讶的是 我找不到任何有关 Android SDK Build tools 的文档 除了 Android SDK 工具和 Android SDK 平台工具之外 还有一堆 Android SDK 构建工具
  • WPF - 如何使用模板创建图像按钮

    我正在尝试创建一个包含 3 个图像的按钮 一个普通图像 一个按下图像和一个禁用图像 我将使用它们来创建向上 向下箭头按钮 我相信正确的方法是从Button并使用Template并设置触发器来更改图像 我有 3 个依赖属性 每个图像一个 图像
  • 产品动态折扣

    在现实世界中 您购买的产品的折扣非常有趣 例如 卖家通过以下方式为其产品提供折扣 购买一份数量不会有折扣 购买 2 个他提供 10 折扣 购买 4 和 5 折扣为 20 6 日及以后 22 在电子商务应用程序中实现此目的的最佳方法是什么 取
  • 用作 MAMP 起始页 URL 的 index.* 文件在哪里?

    我试图了解 MAMP 如何管理 Apache Web 服务器 但我找不到index 用作 MAMP 起始页的文件 虚拟主机配置 httpd vhosts conf 不包括在内并且Applications MAMP htdocs仅包含我自己的
  • 使 minGW 控制台程序在没有控制台的情况下运行

    我在 MinGW 中制作了一个控制台程序 它执行网络和文件操作 然而 它是一个控制台程序 如何让它安静地运行 没有控制台 没有窗口 尝试这个 ShowWindow GetConsoleWindowHandle SW HIDE GetCons
  • 区分大小写的字符串操作

    假设我们有一个变量 例如 set test This is a Test string 我们想要替换每个小写字母t与大写X如此期望的输出 This is a TesX sXring 我尝试使用字符串操作set test test t X 但
  • 基于输入键的 Tabindex 通过获取表单元素在 Jquery 中不起作用

    我有一个表单 我可以通过它获取所有表单元素serializeArray 我想要focus 使用 Enter 键根据其 tabindex 值在表单元素上 只有当它有价值时 否则就专注于它本身 对 jQuery 来说不太新鲜 所以如果有任何错误
  • 在 Cartopy 中隐藏高纬度非矩形投影的右侧轴(纬度)标签

    我试图使用以下命令隐藏此 Cartopy 地图中的右侧标签 又名纬度 right labels False但仅适用于某些值 但是 可以使用隐藏顶部 底部标签top labels False and bottom label False 重现