如何在Python中启用辅助轴(twiny)的共享

2024-02-12

我正在尝试启用主轴和辅助轴的共享。下面的代码说明了示例图。该图包含两个水平轴,主轴网格显示为绿色,而另一个轴网格显示为红色。

#!/usr/bin/python

# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

FIRST = 0.0
LAST  = 2.0
STEP  = 0.01

t = np.arange(FIRST, LAST, STEP)

s1 = np.sin(2*np.pi*t)
s2 = np.exp(-t)
s3 = s1*s2

###############################################################################

plt.rc('axes', grid=True)
plt.rc('grid', color='0.75', linestyle='-', linewidth=0.5)

fig3 = plt.figure()
ax1primary = plt.subplot2grid((4,3), (0,0), colspan=3, rowspan=2)
ax2primary = plt.subplot2grid((4,3), (2,0), colspan=3, sharex=ax1primary)
ax3primary = plt.subplot2grid((4,3), (3,0), colspan=3, sharex=ax1primary)

ax1primary.plot(t,s1)
ax1primary.set_yticks(np.arange(-0.9, 1.0, 0.3))
ax1primary.xaxis.grid(color='green')

ax2primary.plot(t[:150],s2[:150])
ax2primary.set_yticks(np.arange(0.3, 1, 0.2))
ax2primary.xaxis.grid(color='green')

ax3primary.plot(t[30:],s3[30:])
ax3primary.plot([0,2],[0.2,0.2],'m')
ax3primary.set_yticks(np.arange(-0.4, 0.7, 0.2))
ax3primary.xaxis.grid(color='green')

INDEX = t[np.where(abs(s3-0.2) < 0.005)[0]]
INDEX = np.append(INDEX, LAST)
INDEX = np.insert(INDEX, 0, FIRST)

ax1secondary = ax1primary.twiny()
ax1secondary.set_xticks(INDEX)
ax1secondary.xaxis.grid(color='red')

ax2secondary = ax2primary.twiny()
ax2secondary.set_xticks(INDEX)
ax2secondary.xaxis.grid(color='red')

ax3secondary = ax3primary.twiny()
ax3secondary.set_xticks(INDEX)
ax3secondary.xaxis.grid(color='red')

plt.tight_layout()
plt.subplots_adjust(hspace=0)

for ax in [ax1primary, ax2primary, ax2secondary, ax3secondary]:
    plt.setp(ax.get_xticklabels(), visible=False)

###############################################################################

plt.show()

在静态图上没有问题。当 您开始平移(或缩放)子图之一。主(绿色)轴完全保持同步并在所有子图中移动,但次要(红色)轴未对齐并且仅在活动子图中移动。

有没有办法来解决这个问题?


我想要实现的行为如下:

我需要一个公共“主”x 轴(对于所有三个子图),其刻度位于图的底部,另一个公共“辅助”x 轴(对于所有三个子图),其刻度位于图的顶部。主轴是标准的规则间隔轴,而次轴显示自定义刻度(例如过零)这在上面的例子中都得到了满足。现在我需要在平移和缩放子图时也满足它。


感谢您澄清您的问题。预期用途twiny的方法是创建第二个完全独立的 x 轴,具有自己的比例和偏移量,然后您可以将其绘制到其中。但是,在您的情况下,您仅使用由创建的辅助 x 轴twiny作为显示第二组自定义 x 刻度的方法,并且您希望该轴始终具有与父 x 轴完全相同的比例和偏移量。

一种方法是创建一个callback http://matplotlib.org/users/event_handling.html每当主轴被平移时都会更新辅助轴的限制:

from matplotlib.backend_bases import NavigationToolbar2

parents = [ax1primary, ax2primary, ax3primary]
children = [ax1secondary, ax2secondary, ax3secondary]

def callback(event=None):
    # return immediately if the figure toolbar is not in "navigation mode"
    if not isinstance(parents[0].figure.canvas.manager.toolbar,
                      NavigationToolbar2):
        return
    for parent, child in zip(parents, children):
        child.set_xlim(*parent.get_xlim())
        child.set_ylim(*parent.get_ylim())

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

如何在Python中启用辅助轴(twiny)的共享 的相关文章

随机推荐

  • GitHub 从另一个存储库包含

    我是 github 的新手 我的机器上有一个 github 存储库 我想将另一个存储库 作为第三方 包含到我的存储库中 我相信我应该先做一个叉子 但如何将其包含在我的本地存储库中 我尝试过子模块但没有成功 Thanks git 子模块 ht
  • 如何管理 Perl 应用程序开发、构建和部署?

    我还没有想出一种令人满意的方法来管理 Perl 应用程序的开发 构建和部署 我想听听您如何解决这个问题和 或您希望在您现在没有的应用程序构建系统中拥有什么 请描述您的应用程序类型 它是一个 Web 应用程序 它是否在服务器上运行 或者您是否
  • webview中的字体没有改变

    Typeface hnr Typeface createFromAsset this getAssets HelveticaNeueLTStd Md otf html table tr td align left td tr table
  • 用于检测变量更改的 Java 事件侦听器

    我似乎无法在任何地方找到我的问题的答案 是否有任何事件侦听器可以检测布尔值或其他变量的变化 然后对其采取行动 或者是否可以创建自定义事件侦听器来检测这一点 请我似乎无法在任何地方找到解决方案 我发现这个网站 http www example
  • GroupLayout:值得学习吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对java 特别是swing 比较陌生 最近一直在制作一些相当简单的应用程序 边学习边学习 最新的有很多表单组件 例如 JLabels JTe
  • 登录 Microsoft AD 后 Request.IsAuthenticated 始终为 false

    我有一个 ASP NET 4 5 1 MVC WebAPI 项目 它使用 SSO 针对 Microsoft 进行身份验证 成功登录 Microsoft 后 我 的 HomeController 上仍然有 Request IsAuthenti
  • 如何在文本区域中使用不同的字体颜色?

    我希望在输入特定关键字时文本区域中的字体颜色发生变化 就像在 Visual Studio 中一样 我没有在任何地方见过这个 所以我不知道这是否可以用 HTML 和 JavaScript 实现 有人见过这样的东西吗 或者知道怎么写吗 Text
  • 如何使用包含正则表达式的测试路径

    我想检查文件 Test txt 是否存在于特定目录 文件夹名称为 16 位数字 中 我尝试了以下命令 Test Path C Users
  • 无法使用 Unity 找到名称空间“ServiceModel”

    我想在我的 Unity 应用程序中使用 WCF 服务 通过命名管道 因此 我包含以下两个命名空间 using System ServiceModel using System ServiceModel Channels 在Unity中运行我
  • Composer:删除一个包,清理依赖项,不更新其他包

    情况 假设我有一个由 Composer 安装的项目 其中包含两个软件包 php composer phar require squizlabs php codesniffer 2 0 phpmd phpmd 2 1 自动生成的compose
  • 如何解决“此翻译单元中未实现带有选择器的方法”?

    我收到这个错误 如下图所示 the showSingerInfo方法在父类中定义 我该如何解决这个警告 看起来 Clang 无法解析 showSingerInfo 方法的声明 我猜测 showSingerInfo 是翻译单元 类中的本地方法
  • 如何避免从 solr 检索整个存储字段

    我使用 sunspot 和 solr 作为 Rails 应用程序来搜索电子书内容 为了突出显示功能 我必须将 ebook content 设置为存储的文件 每次我查询 solr 的结果时 它都会发回有关该书的整个文档内容 其中使得查询非常慢
  • 在 Android 设置中防止“匹配的 Activity 可能不存在”

    大部分活动操作 用于启动各种设置活动 Settings http developer android com reference android provider Settings html类带有警告 在某些情况下 匹配的活动可能不存在 因
  • 如何使用正则表达式和 Java 计算文本中的音节

    我有文字作为String并需要计算每个单词的音节数 我尝试将所有文 本拆分为单词数组 然后分别处理每个单词 我为此使用了正则表达式 但音节模式并没有发挥应有的作用 请建议如何更改它以计算正确的音节数 我的初始代码 public int ge
  • ZipInputStream.getNextEntry 在某些 zip 文件上返回 null

    我有一个简单的代码来提取 zip 文件 它按预期工作得很好 但在测试过程中 我尝试使用一些 zip 文件 我从互联网下载的字体 图标和模板 来编写代码 以确保它应该提取任何 zip 文件已提供 但它不适用于某些 zip 文件 以下是重新生成
  • nginx 未知指令“上游”

    我使用 nginx 作为代理服务器将请求转发到我的 Gunicorn 服务器上 当我跑步时sudo nginx t c etc nginx sites enabled mysite我收到以下错误 emerg unknown directiv
  • Swift:为蓝牙中央管理器选择队列

    我正在开发一个应用程序 该应用程序将通过 BLE 与智能设备连接并与其通信 问题是 在哪个队列中处理蓝牙事件的最佳实践是 我读过很多教程 在所有教程中我发现了这一点 centralManager CBCentralManager deleg
  • 重命名存储库名称后更新origin

    我正在尝试将我的项目文件推送到我的存储库 但是当我这样做时 我会收到如下屏幕截图所示的错误 我之前在该项目文件中有一个存储库 然后将其删除 现在我在该项目文件中创建了另一个具有不同名称的存储库 但我现在收到这些错误 请告诉我应该做什么 将源
  • 向下滚动时,滚动 100vh 到底部

    我想达到同样的效果http www squaredot eu Intro http www squaredot eu Intro 因此 如果我向下滚动 正文必须滚动 100vh 到底部 而且如果向上滚动 主体必须向上滚动 100vh 我尝试
  • 如何在Python中启用辅助轴(twiny)的共享

    我正在尝试启用主轴和辅助轴的共享 下面的代码说明了示例图 该图包含两个水平轴 主轴网格显示为绿色 而另一个轴网格显示为红色 usr bin python coding utf 8 import numpy as np import matp