使用 Matplotlib 绘制半对数图中的纵横比

2023-12-08

当我在 matplotlib 中绘制函数时,绘图由矩形框住。我希望这个矩形的长度和高度的比率由黄金分割给出,即 dx/dy=1.618033...

如果 x 和 y 比例是线性的,我使用谷歌找到了这个解决方案

import numpy as np
import matplotlib.pyplot as pl
golden_mean = (np.sqrt(5)-1.0)/2.0
dy=pl.gca().get_ylim()[1]-pl.gca().get_ylim()[0]
dx=pl.gca().get_xlim()[1]-pl.gca().get_xlim()[0]
pl.gca().set_aspect((dx/dy)*golden_mean,adjustable='box')

如果它是双对数图,我想出了这个解决方案

dy=np.abs(np.log10(pl.gca().get_ylim()[1])-np.log10(pl.gca().get_ylim()[0]))
dx=np.abs(np.log10(pl.gca().get_xlim()[1])-np.log10(pl.gca().get_xlim()[0]))
pl.gca().set_aspect((dx/dy)*golden_mean,adjustable='box')

但是,对于半对数图,当我调用 set_aspect 时,我得到

UserWarning: aspect is not supported for Axes with xscale=log, yscale=linear

有人能想到解决这个问题的方法吗?


最简单的解决方案是记录数据,然后使用 lin-lin 的方法。

然后,您可以标记轴,使其看起来像正常的对数图。

ticks = np.arange(min_logx, max_logx, 1)
ticklabels = [r"$10^{}$".format(tick) for tick in ticks]

pl.yticks(ticks, ticklabels)

如果您的值高于 10e9,则需要三对大括号,两对用于 LaTeX 大括号,一对用于 .format()

ticklabels = [r"$10^{{{}}}$".format(tick) for tick in ticks]

编辑: 如果您还想要 0.1ex ... 0.9ex 的刻度,您还想使用次要刻度: 它们需要位于 log10(1)、log10(2)、log10(3) ...、log10(10)、log10(20) ...

您可以使用以下命令创建和设置它们:

minor_ticks = []
for i in range(min_exponent, max_exponent):
    for j in range(2,10):
         minor_ticks.append(i+np.log10(j))


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

使用 Matplotlib 绘制半对数图中的纵横比 的相关文章

随机推荐

  • 如果没有活动事务,CreateQuery 无效

    我正在尝试使用 Spring Transactional 注释 但是当该方法时我遇到问题findAll被调用 我有这个错误 org hibernate HibernateException createQuery is not valid
  • C#使用命名空间语句排序

    我想我在某处读到 排序你的 using 语句并删除未使用的语句会带来某种性能优势 但我似乎找不到任何证据或资源来支持这一点 这有什么道理吗 No the using用于设置命名空间的语句没有性能成本 无论语句的顺序如何 生成的 IL 代码都
  • 查找距离 get.shortest.paths() 的路线距离

    我正在使用igraph在 R 中封装来做一些相当简单的事情 计算网络中两个节点之间的最短距离 有没有一种直接的方法来提取通过计算得出的路径的距离get shortest paths 这是一些可重现的代码 说明了我的问题 reproducib
  • Android 2.2 上的振动设置

    我正在制作一个振动切换小部件 事实上 它的第一个版本已经在市场上 但我在 Android 2 2 的振动设置方面遇到了一些问题 直到 Android 2 1 我都没有问题 当我想禁用振动时我会这样做 am setVibrateSetting
  • 如何获取当前 Subversion 内部版本号?

    如何在 Subversion 中自动导入最新的内部版本 修订号 目标是让该数字像 SO 一样在您的网页页脚上可见 让您的构建过程调用svn版本命令 并将其输出嵌入到生成的 source binaries 中 这不仅会给出当前修订版 就像这里
  • agda 程序一定会终止吗?

    有几个地方指出所有 agda 程序都会终止 不过我可以构造一个这样的函数 stall n stall 0 0 stall x stall x 语法荧光笔似乎不喜欢它 但没有编译错误 计算范式stall 0结果是0 计算结果stall 1导致
  • 将 Windows 窗体中的 DataGridView 绑定到列表>

    我有一个格式为 List of List of T 的自定义对象集合 即自定义对象列表的列表 我需要将此集合绑定到Windows窗体中的datagridview控件 并且页面数应等于外部列表中的内部列表的数量 每个页面都应该绑定到内部Lis
  • Sweave 中的自定义图形设备

    My 在Sweave文档中插入带有特殊字符的pdf图形的问题已通过在 Sweave 本身之外创建 pdf 图然后导入它来解决 根据 Sweave 文档 我编写了一个自定义图形设备 它应该以完全相同的方式构建 pdf 图形 然而它不起作用 您
  • javascript 只允许在文本字段中使用字母数字和连字符 - 值

    我有一个文本字段 我正在读取其值 我只想允许字母数字字符和连字符 值 如果我输入 abc d 或 w2w 2 或 we 23 等值 到目前为止我的正则表达式似乎不会触发 var someName document getElementByI
  • 打开新标签页时,Google Chrome 到底会做什么?

    今天 我观察到一个有趣的行为 我使用的是 Windows XP sp3 操作系统 当我在 Google Chrome 中打开新选项卡并查看任务管理器时 会创建一个新进程 但是 一段时间后 这个过程就会终止 为什么它会表现出这样的行为 是不是
  • libspotify 导致苹果应用商店拒绝

    看来 Apple 从 5 月 1 日起收紧了应用程序商店提交 我有一个使用 Spotify 的应用程序 并且已多次被 App Store 接受 在最近的更新中 该应用程序因以下原因被拒绝 非公开API使用 应用程序不允许访问UDID 并且不
  • codeigniter $this->db->query() 或 $this->db->e​​scape() 是否可以防止 SQL 注入?

    我想问一下这2个方法 this gt db gt escape and this gt db gt query 那些可以防止SQL注入吗 首先 你应该清楚什么是db gt escape and db gt query does db gt
  • 将布尔值转换为整数会返回 -1 表示 true?

    我正在和一些人一起工作VB NET代码似乎使用以下方法将布尔值转换为整数CInt myBoolean 发生的奇怪的事情是 如果值为 true 它会返回 1 例如 CInt True returns 1 CInt False returns
  • 从 IP 摄像头流式传输 C#

    我有以下代码不起作用 我的camUrl如果我加载到 Firefox 并从我的摄像头进行流传输 则链接有效 但在运行时我的图片框中没有显示任何内容 有什么想法吗 public Thread camThread private string c
  • Jasper:从 url 打开输入流时出错

    我正在使用 iReport 设计一个 jasper 报告 它接受一个参数并从给定的 URL 获取图像 参数是用户在 Twitter 中的屏幕名称 url 是其个人资料图片
  • 使用“--to script”忽略“jupyter nbconvert”中的降价单元

    是否可以有jupyter nbconvert to script忽略 Markdown 单元格而不是将其转换为注释 我问是因为我想使用flake8检查生成的 Python 代码 但我不想包含 markdown 单元格 例如 因为它们通常很长
  • 如何更改访问的CSS中的字体大小? [复制]

    这个问题在这里已经有答案了 在我的应用程序中 我需要更改所访问链接的字体大小 我正在做的是 a visited color pink font size 12px 但只有颜色发生了变化 为什么字体大小没有改变 的局限性 visited Th
  • 如何使用Polymer Fire将数据插入Firebase(多节点+多路径)

    我的用例是我有一个
  • Python调用脚本而不等待它执行

    我想知道是否有任何方法可以调用 python 脚本 并在不同的线程中完全启动该程序 以便主程序 调用者 不必等到被调用的脚本完成执行 到目前为止 我已经尝试了 subprocess 和 os system 但这两个都会延迟 直到脚本完成执行
  • 使用 Matplotlib 绘制半对数图中的纵横比

    当我在 matplotlib 中绘制函数时 绘图由矩形框住 我希望这个矩形的长度和高度的比率由黄金分割给出 即 dx dy 1 618033 如果 x 和 y 比例是线性的 我使用谷歌找到了这个解决方案 import numpy as np