matplotlib:半球/楔形的自定义投影

2024-03-29

我正在看定制投影 http://matplotlib.sourceforge.net/examples/api/custom_projection_example.htmlmatplotlib 库中的示例 - 我正在尝试修改它以仅绘制南半球。我已将必要的 [-pi/2,pi/2] 限制调整为 [-pi/2,0]。现在我一直在看:

def _gen_axes_patch(self):
    """
    Override this method to define the shape that is used for the
    background of the plot.  It should be a subclass of Patch.

    In this case, it is a Circle (that may be warped by the axes
    transform into an ellipse).  Any data and gridlines will be
    clipped to this shape.
    """
    #return Circle((0.5, 0.5), 0.5)
    return Wedge((0.5,0.5), 0.5, 180, 360)

def _gen_axes_spines(self):
    return {'custom_hammer':mspines.Spine.circular_spine(self,
                                                  (0.5, 0.5), 0.25)}

As you can see, I've replaced the Circle patch with a Wedge. This is what the projection plot currently looks like: projection plot

脊柱仍然遵循圆形/椭圆形 - 我如何指定我希望脊柱遵循楔形的边界?

我不确定如何最好地修改脊柱,所以任何帮助将非常感激!

Thanks,

Alex


郑重声明一下,如果你还是 Python 新手,那么你肯定会直接跳进池子的最深处。 (感谢您直接进入!)

您正在做的事情需要对 matplotlib 的内部工作有相当详细的了解,这是一个相当复杂的库。

话虽如此,这是快速学习的好方法!

对于这样的事情,你需要了解internal事物的结构方式而不仅仅是“公共”API 的架构。

对于大部分内容,您必须深入挖掘并“使用源代码”。对于任何项目,内部工作的文档就是代码本身。

话虽如此,对于一个简单的案例来说,这是非常简单的。

import numpy as np
from matplotlib.projections.geo import HammerAxes
import matplotlib.projections as mprojections
from matplotlib.axes import Axes
from matplotlib.patches import Wedge
import matplotlib.spines as mspines

class LowerHammerAxes(HammerAxes):
    name = 'lower_hammer'
    def cla(self):
        HammerAxes.cla(self)
        Axes.set_xlim(self, -np.pi, np.pi)
        Axes.set_ylim(self, -np.pi / 2.0, 0)

    def _gen_axes_patch(self):
        return Wedge((0.5, 0.5), 0.5, 180, 360)

    def _gen_axes_spines(self):
        path = Wedge((0, 0), 1.0, 180, 360).get_path()
        spine = mspines.Spine(self, 'circle', path)
        spine.set_patch_circle((0.5, 0.5), 0.5)
        return {'wedge':spine}

mprojections.register_projection(LowerHammerAxes)

if __name__ == '__main__':
    import matplotlib.pyplot as plt
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='lower_hammer')
    ax.grid(True)
    plt.show()

让我们深入研究一下_get_axes_spines方法一点:

def _gen_axes_spines(self):
    """Return the spines for the axes."""
    # Make the path for the spines
    # We need the path, rather than the patch, thus the "get_path()"
    # The path is expected to be centered at 0,0, with radius of 1
    # It will be transformed by `Spine` when we initialize it
    path = Wedge((0, 0), 1.0, 180, 360).get_path()

    # We can fake a "wedge" spine without subclassing `Spine` by initializing 
    # it as a circular spine with the wedge path. 
    spine = mspines.Spine(self, 'circle', path)

    # This sets some attributes of the patch object. In this particular 
    # case, what it sets happens to be approriate for our "wedge spine"
    spine.set_patch_circle((0.5, 0.5), 0.5)

    # Spines in matplotlib are handled in a dict (normally, you'd have top,
    # left, right, and bottom, instead of just wedge). The name is arbitrary
    return {'wedge':spine}

现在有一些问题:

  1. 物体未正确居中于轴内
  2. 轴补丁可以放大一点,以正确占据轴内的空间。
  3. 我们正在绘制整个地球的网格线,然后裁剪它们。仅将它们绘制在我们的“较低”楔形内会更有效。

然而,当我们看看如何HammerAxes是结构化的,您会注意到很多这些东西(特别是轴补丁的中心)都被有效地硬编码到变换中。 (正如他们在评论中提到的,这只是一个“玩具”示例,并且假设您始终处理整个地球,使得转换中的数学变得更加简单。)

如果你想修复这些问题,你需要调整其中的几个不同的转换HammerAxes._set_lim_and_transforms.

然而,它按原样运行得相当好,所以我将把它作为练习留给读者。 :) (请注意,这部分有点难,因为它需要详细了解 matplotlib 的转换。)

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

matplotlib:半球/楔形的自定义投影 的相关文章

  • Python3+Kivy+Plyer 推送通知图标问题

    我在使用 Android 的简单通知测试应用程序时遇到了一个奇怪的错误 错误 python AttributeError type object notification org notificator R drawable has no
  • 根据 pandas 中的条件交换列值

    我想按条件重新定位列 如果国家 地区是 日本 我需要将姓氏和名字反向重新定位 df pd DataFrame France Kylian Mbappe Japan Hiroyuki Tajima Japan Shiji Kagawa Eng
  • 如何用xlrd读取公式

    我正在尝试做一个解析器 它读取几个 Excel 文件 我通常需要位于行底部的值 您可以在其中找到所有上部元素的总和 因此 单元格值实际上是 sum 或 A5 0 5 可以说 对于使用 Excel 打开此文件的用户来说 它看起来像一个数字 这
  • 远程控制或脚本打开 Office 从 Python 编辑 Word 文档

    我想 最好在 Windows 上 在特定文档上启动 Open Office 搜索固定字符串并将其替换为我的程序选择的另一个字符串 我该如何从外部 Python 程序中做到这一点 OLE 什么 原生 Python 脚本解决方案 The doc
  • 使用 Python 解析 XML,解析外部 ENTITY 引用

    在我的 S1000D xml 中 它指定了一个带有对公共 URL 的引用的 DOCTYPE 该 URL 包含对包含所有有效字符实体的许多其他文件的引用 我使用 xml etree ElementTree 和 lxml 尝试解析它并得到解析错
  • 我有一个 Employee 类,我想返回“姓名”列表

    我有一个 Employee 类 我想返回 姓名 列表 雇员 py class Employee object def init self id name members None self id id self name name self
  • 如何像在浏览器中一样检索准确的 HTML

    我正在使用 Python 脚本来呈现网页并检索其 HTML 它适用于大多数页面 但对于其中一些页面 检索到的 HTML 不完整 我不太明白为什么 这是我用来废弃此页面的脚本 由于某种原因 每个产品的链接不在 HTML 中 Link http
  • 如何将同步函数包装在异步协程中?

    我在用着aiohttp https github com aio libs aiohttp构建一个 API 服务器 将 TCP 请求发送到单独的服务器 发送 TCP 请求的模块是同步的 对于我来说是一个黑匣子 所以我的问题是这些请求阻塞了整
  • 别碰我的女人

    我讨厌的一件事迪斯图尔斯 http docs python org distutils 我猜他是邪恶的人 他这样做了 https github com python cpython blob 300dd552b15825abfe0e367a
  • 如何在python中递归复制目录并覆盖全部?

    我正在尝试复制 home myUser dir1 及其所有内容 及其内容等 home myuser dir2 在Python中 此外 我希望副本覆盖中的所有内容dir2 It looks like distutils dir util co
  • Docker 日志中的 Python 异常标记为流:stdout

    我想解析和处理来自 docker 容器的所有错误 但当我期望 stderr 时 Python 异常标记为 stdout 举个简单的例子app py raise Exception 然后我在 docker 容器中运行这个文件 但在 var l
  • 与函数复合 UniqueConstraint

    一个快速的 SQLAlchemy 问题 我有一个 文档 类 其属性为 数字 和 日期 我需要确保没有重复的号码同年 是 有没有办法对 数字 年份 日期 进行UniqueConstraint 我应该使用唯一索引吗 我如何声明功能部分 SQLA
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • SpaCy 中的自定义句子边界检测

    我正在尝试在 spaCy 中编写一个自定义句子分段器 它将整个文档作为单个句子返回 我编写了一个自定义管道组件 它使用以下代码来执行此操作here https github com explosion spaCy issues 1850 但
  • 使用Python重命名目录中的多个文件

    我正在尝试使用以下 Python 脚本重命名目录中的多个文件 import os path Users myName Desktop directory files os listdir path i 1 for file in files
  • Django - 缺少 1 个必需的位置参数:'request'

    我收到错误 get indiceComercioVarejista 缺少 1 个必需的位置参数 要求 当尝试访问 get indiceComercioVarejista 方法时 我不知道这是怎么回事 views from django ht
  • 将数组从 .npy 文件读入 Fortran 90

    我使用 Python 以二维数组 例如 X 的形式生成一些初始数据 然后使用 Fortran 对它们进行一些计算 最初 当数组大小约为 10 000 x 10 000 时 np savetxt 在速度方面表现良好 但是一旦我开始增加数组的维
  • Python 中的迭代器 (iter()) 函数。 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 对于字典 我可以使用iter 用于迭代字典的键 y x 10 y 20 for val in iter y print val 当
  • 如何抑制 Pandas Future 警告?

    当我运行该程序时 Pandas 每次都会给出如下所示的 未来警告 D Python lib site packages pandas core frame py 3581 FutureWarning rename with inplace
  • 从 Flask 中的 S3 返回 PDF

    我正在尝试在 Flask 应用程序的浏览器中返回 PDF 我使用 AWS S3 来存储文件 并使用 boto3 作为与 S3 交互的 SDK 到目前为止我的代码是 s3 boto3 resource s3 aws access key id

随机推荐

  • Swing - MaskFormatter - 从文本字段右侧输入数字

    我是 Swing Java 开发的新手 有人可以帮我解决这个问题吗 我有一个带有 maskformatter 的 jformattedtextfield 它工作得很好 但我唯一想知道的是我们是否可以使其从右侧输入数字 下面的代码可以很好地从
  • jQuery 过滤器:包含链接(a href="#")

    我有一个当前的链接 a href 但很快客户就会将链接更改为 a href something 当链接变成某种东西时 我想使用 jQuery 来更改 css 但我不知道如何为属性编写过滤器 href 您可以使用以下两个选项来比较您的href
  • cypress 支持软断言吗?

    cypress 支持软断言吗 例如 我正在浏览 n 个元素并想要验证它们的值 如果任何元素的值不匹配 则测试失败 它不会继续验证下一个元素的值 有没有办法验证所有元素值并在最后显示失败的值 EDIT 我可能误解了 如果你的意思是软断言cy命
  • Cookie 未更新

    我正在尝试更新 cookie 值 但它不起作用 我尝试过的所有操作都不会更新 cookie 而且我总是得到 cookie 的初始值 所以我进行了搜索 根据 MSDN 我应该能够通过执行以下操作来更新 cookie HttpCookie co
  • JFrame背景图片

    我正在创建一个简单的 GUI 我希望有一个背景图像 2048 X 2048 填充整个窗口 并在左上角有一个正方形 可以偶尔加载 64 X 64 图像 如何才能做到这一点 我已经知道如何设置 JFrame 的大小 它的图像加载我需要帮助 这是
  • 为什么 java.awt.Point 提供了设置和获取双精度数的方法,但将 x 和 y 存储为 int?

    正如您在 Oracle 文档中看到的java awt Point http docs oracle com javase 6 docs api java awt Point html x 和 y 存储为int 然而 getX and get
  • 创建服务(SERVICE_ACCEPT_SESSIONCHANGE)

    我正在尝试按照以下链接中记录的示例创建服务 http msdn microsoft com en us library bb540475 v VS 85 aspx http msdn microsoft com en us library
  • git-svn 变基错误

    运行 git svn rebase 后出现以下错误 update index refresh 命令返回错误 1 有任何想法吗 以下是整个输出 git svn rebase dry run xxx iphone xxx prototype2
  • 查找字符串中的所有字符串

    我通过 http 请求响应文本获取 StrTxt 作为 html 字符串 我想找到 StrTxt 中所有出现的 字符串 像这样的东西 for each string in StrTxt StrTxt all matched strings
  • $location.path 在一定的超时后不起作用

    我正在尝试执行登录身份验证 并且正在尝试使用 angularJS 显示进度视图 例如 app config function locationProvider routeProvider routeProvider when templat
  • 将左值绑定到右值引用时 std::forward 与 std::move

    这里的移动和前进有区别吗 void test int val val 4 void main int nb test std forward
  • Yii2 错误:yii\base\UnknownMethodException:调用未知方法:yii\web\UrlManager::addRules()

    今天更新作曲家依赖项 使用作曲家更新命令 后 我的 Yii2 应用程序损坏了 它抛出未知方法 yii base UnknownMethodException 调用未知方法 yii web UrlManager addRules 检查后供应商
  • 隐藏和删除 ssrs 报告中标题的空白

    我正在研究一个ssrs报告 我可以隐藏最后一页上的标题 IIF Globals PageNumber Globals TotalPages 1 or Globals PageNumber Globals TotalPages true fa
  • ExpansionTile 不保持状态

    以下问题 我有一个清单扩展瓷砖 https docs flutter io flutter material ExpansionTile class html效果很好 我面临的唯一问题是 滚动到视图之外的展开的 ExpansionTile
  • android - Moto G 手机未显示在 Eclipse 的设备列表中

    我正在尝试将 Moto G Mobile 连接到我的 Windows 7 32 位计算机中的 Eclipse 但它没有显示在设备列表中 为此 首先我通过 USB 电缆将设备连接到机器 然后选择PTP模式 然后我检查了设备设置中的 USB 调
  • Spring批处理返回自定义进程退出代码

    我有一个包含多个作业的 jar 我只想每次只执行一个作业并检索自定义退出代码 例如 我有基本工作 retrieveErrorsJob 配置 只需一步即可读取输入 XML 文件并将数据写入特定数据库表中 应用类 SpringBootAppli
  • CMake - 删除单个翻译单元的编译标志

    我想删除单个翻译单元的设置编译标志 有没有办法做到这一点 例如使用set property 注意 编译标志没有 fno name否定 无论出于何种原因 我试过了 get property FLAGS TARGET target PROPER
  • 二维网格中的不同随机点

    我有一个大的二维网格 比如说 10000 X 10000 我需要从这些网格中选择 1000 个随机点 但我还需要注意这两个点都不相同 我想到的标准方法是在选择每个点之后 我应该检查所有先前的条目以查看该点是否已被选择 但对于大网格和大量点来
  • 连接到 EC2 Django 开发服务器

    我是 EC2 和 Web 开发的新手 目前我有一个正在运行的 Linux EC2 实例 并且已经安装了 Django 在开始我的实际项目并尝试运行 Django 测试服务器之前 我正在创建一个测试项目 这是我在 shell 中的输出 pyt
  • matplotlib:半球/楔形的自定义投影

    我正在看定制投影 http matplotlib sourceforge net examples api custom projection example htmlmatplotlib 库中的示例 我正在尝试修改它以仅绘制南半球 我已将