在 matplotlib 中用两个 Y 轴(两个单位)绘制单个数据

2023-12-23

我正在尝试绘制单个时间序列,但想用左轴和右轴上的两个单位表示它。这是我到目前为止所做的。

fig, ax1 = plt.subplots()
t = np.arange(1,50,1)
s1 = np.sin(t)*20000+40000 #synthetic ts, but closer to my data 
ax1.plot(t, s1, 'b-')

ax1.set_xlabel('time')
ax1.set_ylim(20000,70000)
ax1.set_ylabel('km3/year')

km3yearToSv=31.6887646*(1/1e6)

ax2 = ax1.twinx()
s2 = s1*km3yearToSv
ax2.plot(t, s2, 'b-')
ax2.set_ylim(20000*km3yearToSv,70000*km3yearToSv)
ax2.set_ylabel('Sv')

通过调整 ylim(),我可以让它看起来像一行,但可以看到一些锯齿。如果我不必绘制数据两次,我会更喜欢。

有什么建议么?

更新:谢谢,askewchan,提供完美的解决方案!


不需要绘制两次,这么多应该会给你你想要的结果:

ax2 = ax1.twinx()
ax2.set_ylim(20000*km3yearToSv, 70000*km3yearToSv)
ax2.set_ylabel('Sv')

一种更可靠的方法是首先提取绘图的限制(以防您更改它们,并且它们不再是20000 and 70000,或者您希望绘图能够自动调整限制:

ax2 = ax1.twinx()
mn, mx = ax1.get_ylim()
ax2.set_ylim(mn*km3yearToSv, mx*km3yearToSv)
ax2.set_ylabel('Sv')

总而言之,还有一些其他的小调整:

import numpy as np
import matplotlib.pyplot as plt

mean, amp = 40000, 20000
t = np.arange(50)
s1 = np.sin(t)*amp + mean #synthetic ts, but closer to my data 

fig, ax1 = plt.subplots()
ax1.plot(t, s1, 'b-')

ax1.set_xlabel('time')
mn, mx = ax1.set_ylim(mean-amp, mean+amp)
ax1.set_ylabel('km$^3$/year')

km3yearToSv = 31.6887646e-6

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

在 matplotlib 中用两个 Y 轴(两个单位)绘制单个数据 的相关文章

随机推荐

  • 如何通过多个属性Java8对HashMap条目值进行排序[重复]

    这个问题在这里已经有答案了 如何按多个属性对 HashMap 条目进行排序 假设我有一个键为 String 且值为 Object 的映射 Map
  • 在centos上专门在python 2.7中安装MySQLdb

    我正在使用 CentOS 版本 6 5 最终版 我目前使用的是python 2 4 在其中我可以毫无问题地使用MySQL root dedicado home digicelc public html gestion python cate
  • JUNIT:对于大量测试类仅运行一次安装程序

    我有一门课程 我用它作为单元测试的基础 在这个类中 我初始化了测试的整个环境 设置数据库映射 在多个表中输入大量数据库记录等 该类有一个带有 BeforeClass 注释的方法来执行初始化 接下来 我使用具有 Test 方法的特定类来扩展该
  • 有没有办法在循环内部知道您是否处于最终迭代?

    在迭代数组 或任何其他可枚举 时 是否有任何干净且简单的方法可以知道您是否处于最终迭代 例如 在 Rails 视图中 您可能要显示一组内容 并且您可能希望在它们之间放置一条水平线 但不要在每个内容之前 也不要在每个内容之后 仅限于他们之间
  • git 中缺少提交的更改

    我有一个由几个人组成的团队 使用 git flow 方法 master develop hotfixes features releases 和一个远程裸存储库 在同一个 git 存储库上工作 我们有一个包含一些提交的修补程序 已成功合并到
  • 连接更改上的 API 挂钩

    我在 Android 手机上有一个打印机检查应用程序 它的基本检查表即使检查员没有互联网连接 也可以进行打印机检查 一旦电话恢复接收 互联网 我想提交检查 我正在考虑使用 Android 服务来设计应用程序因此它将使用 sqlite 保存检
  • hashCode 或 equals 中的 HibernateException

    我正在使用 spring 和 hibernate 当在没有实现 equals 和 hashCode 的情况下进行获取时 一切正常 当我添加这两个方法并执行查询时 哈希码内会抛出一个 LazyinitializationException 我
  • Django:无法导入名称

    我刚刚在向我的网站部署新更新时遇到了一个非常烦人的问题 我有两个独立的网站 其中之一是开发版本 现在 当我想将更改应用于生产时 由于错误消息 它将无法工作 文件 usr lib python2 6 dist packages django
  • 无法粘贴到 MacVim 中

    我从 Vim 外部复制文本 其他应用程序中的 V 粘贴文本没有问题 在 MacVim 中 它不起作用 在插入模式下 什么也没有出现 在正常模式下 我得到E353 Nothing in register 发生这种情况时set clipboar
  • 为什么 AspectJ @Around 建议执行两次?

    我有以下 AspectJ 示例 它是作为 hello world 风格的概念证明而完成的 中的建议代码StyleAspect似乎执行了两次 即使实际代码在SomeClass仅执行一次 根据需要 这是代码 首先 一个名为 WithStyle
  • 从 Mozilla Firefox 重定向到 Android 应用程序 - 深层链接

    我使用意图过滤器来允许深度链接到我的应用程序的活动 就像下面给出的例子一样 https developer android com training app indexing deep linking html https develope
  • 从 jQuery 返回 PHP

    我想通过 jQuery 回显 HTML 下拉值
  • 实施 Spring-Social 记住我

    我有一个启用 Spring Security 的项目 我已经使用登录表单实现了 记住我 效果很好 但我在登录表单上也有来自 google facebook 的社交登录 效果很好 问题是他们不记得用户 有没有办法设置类似的 记住我 功能 我当
  • 回滚时,App 和 DB 哪个应该主动执行任务?

    MySql InnoDB 设置自动提交关闭并使用默认隔离级别 REPEATABLE READ 有两种场景 两个不同的事务 T1 和 T2 按以下时间顺序运行 1 time T1 T2 t1 update row 1 gt OK t2 upd
  • 使用 Gson 反序列化 Java 8 LocalDateTime

    我有带有 2014 03 10T18 46 40 000Z 格式的日期时间属性的 JSON 我想使用 Gson 将其反序列化为 java time LocalDateTime 字段 当我尝试反序列化时 出现错误 java lang Ille
  • 将 po 文件编译为 mo 的好处

    编译 GNU gettext 的好处和主要原因是什么 po 可移植对象 文件到 mo 机器对象 我看到很多程序正在读取 解析 po直接地 我没有使用 wordpress 但在他们的文档中它说 https codex wordpress or
  • github 52 周参与如何运作?

    我对我的 github 52 周参与图感到困惑 我在那里的大多数项目只有一位作者 我 然而 在 52 周的参与中 所有者的承诺 为零 尽管我所有的承诺都是由我自己完成的 我的页面 https github com yule https gi
  • Phonegap Pushnotification + node-gcm:群组通知

    我在 Node 应用程序中有这样的东西 var sender new gcm Sender XPTO var registrationIds whatever var message new gcm Message data avatar
  • Android 可绘制对象对于 API <23 显得拉伸,而对于 API 23 及更高版本则正确

    我目前正在为我的列表视图使用列表选择器 并使用图层列表创建它 这是我的 xml 代码
  • 在 matplotlib 中用两个 Y 轴(两个单位)绘制单个数据

    我正在尝试绘制单个时间序列 但想用左轴和右轴上的两个单位表示它 这是我到目前为止所做的 fig ax1 plt subplots t np arange 1 50 1 s1 np sin t 20000 40000 synthetic ts