带有对数刻度的更好的刻度和刻度标签

2024-04-24

我正在尝试获得更好看的双对数图,除了一个小问题之外,我几乎得到了我想要的。

我的示例偏离标准设置的原因是 x 值限制在不到十年的范围内,并且我想使用十进制,而不是科学记数法。

请允许我用一个例子来说明:

import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib as mpl
import numpy as np

x = np.array([0.6,0.83,1.1,1.8,2])
y = np.array([1e-5,1e-4,1e-3,1e-2,0.1])

fig1,ax = plt.subplots()
ax.plot(x,y)
ax.set_xscale('log')
ax.set_yscale('log')

其产生:

x 轴有两个问题:

  1. 使用科学计数法,在这种情况下会适得其反

  2. 右下角可怕的“偏移”

经过大量阅读后,我添加了三行代码:

ax.xaxis.set_major_formatter(mpl.ticker.ScalarFormatter())
ax.xaxis.set_minor_formatter(mpl.ticker.ScalarFormatter())
ax.ticklabel_format(style='plain',axis='x',useOffset=False)

这会产生:

我对此的理解是,有 5 个小刻度和 1 个大刻度。它好多了,但仍然不完美:

  1. 我想要 1 到 2 之间的一些额外刻度
  2. 1 处的标签格式错误。应该是“1.0”

所以我在格式化语句之前插入了以下行:

ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(0.2))

我终于得到了我想要的刻度:

我现在有 8 个主要刻度和 2 个次要刻度。现在,这看起来几乎是正确的,除了 0.6、0.8 和 2.0 处的刻度标签比其他刻度标签显得更粗这一事实之外。这是什么原因?我该如何纠正?


某些标签显示为粗体的原因是它们是主要刻度标签和次要刻度标签的一部分。如果两个文本完全重叠,它们会因抗锯齿而显得更粗。
您可能决定仅使用次要刻度标签并使用NullLocator.

由于您希望拥有的刻度标签的位置非常具体,因此没有自动定位器可以开箱即用地提供它们。对于这种特殊情况,最简单的方法可能是使用FixedLocator并指定您希望作为列表的标签。

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

x = np.array([0.6,0.83,1.1,1.8,2])
y = np.array([1e-5,1e-4,1e-3,1e-2,0.1])

fig1,ax = plt.subplots(dpi=72, figsize=(6,4))
ax.plot(x,y)
ax.set_xscale('log')
ax.set_yscale('log')

locs = np.append( np.arange(0.1,1,0.1),np.arange(1,10,0.2))
ax.xaxis.set_minor_locator(ticker.FixedLocator(locs))
ax.xaxis.set_major_locator(ticker.NullLocator())

ax.xaxis.set_minor_formatter(ticker.ScalarFormatter())

plt.show()

对于更通用的标签,当然可以对定位器进行子类化,但是我们需要知道用于确定刻度标签的逻辑。 (由于我没有看到问题中所需滴答声的明确定义的逻辑,我觉得现在提供这样的解决方案是浪费精力。)

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

带有对数刻度的更好的刻度和刻度标签 的相关文章

  • 将图例添加到曲面图

    我正在尝试向表面图添加图例 但无法这样做 这是代码 import numpy as np from mpl toolkits mplot3d import Axes3D import matplotlib pyplot as plt imp
  • matplotlib vlines 图中未应用 y 轴的最小值

    我正在 matplotlib 中绘制 vlines 图 数据集中的所有 y 值如下 gt 0 我希望 y 轴最底部的刻度能够读取0 但相反 我得到 500 这是代码 usr bin env python import numpy as np
  • 如何在seaborn中将matplotlib颜色图设置为调色板

    如何将 matplotlib 颜色图设置为 seaborn 中的调色板 有一个类似的问题here https stackoverflow com questions 57373881 converting a matplotlib colo
  • Enthought - matplotlib(plot()函数的问题)

    我正在尝试使用绘图库 http en wikipedia org wiki Matplotlib在冠层快车上 即使简单的代码也无法运行 注意 系统无法识别plot x 功能 好像有 ASCII X Unicode 的东西 我的计算机使用 U
  • 为什么 Jupyter Notebook 在更新绘图时会创建重复的绘图

    我正在尝试在 Jupyter Notebook 中绘制每秒更新一次的绘图 现在 我只有一个可以运行的简单代码 matplotlib inline import time import pylab as plt import numpy as
  • pcolormesh 的输入格式

    我正在尝试使用底图制作热量 强度图 我的输入是当时的一组纬度 经度和强度 数据集如下所示 lat 0 lon 0 intensity 0 lat 1 lon 1 intensity 1 lat n lon n intensity n 在每个
  • 如何计算python 2D散点占用面积

    我使用 matplotlib 绘制了这两个 2000 个点的序列 从图片上看 前2000点占用的面积比后2000点要小 但如果我想定量计算2000个点的第一序列和第二序列占用了多少面积 该怎么办 我真的很感谢任何帮助 建议或意见 非常感谢
  • python ImportError:没有名为 Tkinter 的模块

    每次我尝试奔跑import matplotlib 我有错误ImportError No module named Tkinter 输出结果如下所示 Python 2 7 5 default Aug 2 2016 04 20 16 GCC 4
  • 给定一般 3D 平面方程

    假设我有一个 3D 平面方程 ax by cz d 我如何在 python matplotlib 中绘制它 我看到一些例子使用plot surface 但它接受 x y z 值作为二维数组 我不明白如何将我的方程转换为参数输入plot su
  • Python 3.x 中的绘图

    在Python 2 6中 我使用matplotlib制作了一些简单的图表 但是 它与 Python 3 1 不兼容 有哪些替代模块可以完成相同的事情而不非常复杂 您说您想创建一些简单的图表 但没有真正说明您想要多简单或哪种类型的图表 只要它
  • 如何缩放图像的一部分并插入到 matplotlib 中的同一图中

    我想缩放数据 图像的一部分并将其绘制在同一个图中 看起来有点像这个图 是否可以在同一图中插入缩放图像的一部分 我认为可以用子图绘制另一个图形 但它绘制了两个不同的图形 我还阅读了添加补丁以插入矩形 圆形 但不确定将图像的一部分插入到图中是否
  • Matplotlib:以数据坐标中给定的宽度绘制线条

    我试图弄清楚如何绘制具有数据单位宽度的线条 例如 在下面的代码片段中 我希望宽度为 80 的线的水平部分始终从 y 40 延伸到 y 40 标记 并且即使坐标系的限制也保持这种状态改变 有没有办法用 matplotlib 中的 Line2D
  • 使用自定义颜色渐变填充两条线之间的区域

    我正在做一项几乎已经完成的作业 但我想对其添加一些小改动 尝试使用基于温度的颜色图而不是简单的颜色来填充两条线之间的区域 绘制线条的方式本质上使它们成为独立的实体 所以我知道我可能需要两个彼此相遇或重叠的颜色图来完成此任务 但我不太确定如何
  • 如何将交互式 matplotlib 图形插入 tkinter 画布

    我正在尝试将交互式 matplotlib 图形 具有滑块 重置按钮和单选按钮的图形 放入 tkinter Canvas 中 我已成功添加非交互式图表 但当它变为交互式时找不到问题 我尝试将所有内容更改为使用 matplotlib Figur
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 无法将图形另存为 .eps [gswin32c 无法识别]

    我使用Pylab 64位 的Enth tough冠层 在我的报告中 我需要使用乳胶 Xelatex 并使用matplotlib完成图 为了获得第一个想法 我刚刚复制了第二个示例http matplotlib org users usetex
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 绘制与Fig.show()内联的IPython Notebook图形?

    我正在使用 IPython Notebook 调用内联模式 pylab inline 以下代码立即在单元格处绘制一个图形 fig plt figure axes fig add axes 0 0 1 1 不过 我想在一个单元格中创建绘图 轴

随机推荐

  • “by viewModels()”Kotlin 属性委托未解析的引用

    我正在尝试用 kotlin 实现 viewmodel 首先我添加了所需的依赖项 implementation androidx appcompat appcompat 1 1 0 implementation androidx core c
  • 更改区域设置:强制活动重新加载资源?

    所以我的应用程序中有一个语言设置 切换语言时 我希望所有文本视图等立即更改语言 目前我只是更改配置中的区域设置 因此当用户重新启动活动时语言已更改 我的问题的一个丑陋的解决方案是让每个文本视图在每次更改语言时加载新资源 有更好的解决方案吗
  • git stash apply 和 git stash apply --index 有什么区别?

    每当我跑步时git stash apply and git stash apply index完成后git stash a即使我的 WIP 目录有暂存的更改 未暂存的 但跟踪的更改 和未跟踪的文件 我也会得到相同的结果 这是正常的吗 不应该
  • 将 XML 转换为带属性的 ruby​​ 哈希

    客观的 将 XML 转换为 ruby Hash 包含所有节点和属性值 我尝试了什么 xml
  • ASP.Net Core 回发后如何保持选项卡处于活动状态

    我有一个视图 其中包含一组选项卡 每个选项卡呈现不同的部分视图 阅读这些引导选项卡的文档和 W3Schools 示例后 我无法找到一种方法使活动选项卡在回发时保持活动状态 我见过的所有示例都使用旧版本的 Net 并且也不适用 这是我的代码
  • 类型错误:$.browser 未定义

    我正在使用 msdropdown 图像组合框来创建下拉选择选项 当我在我的电脑上本地运行此代码时 一切都运行良好 但是当我在 GoDaddy 服务器上运行它时 msdropdown 被禁用 它不适用于任何浏览器 Firebug 将错误显示为
  • Rust 双与号,&&

    我看到一些代码如下所示 fn test lt a gt a mut a str 我知道 a 是一生 而 是引用 但是我很难理解双重引用 根据我的理解 引用是一个指针 那么 是指向另一个指针还是其他指针的指针 根据我的理解 引用是一个指针 是
  • Gitlab:无法识别对等方的证书颁发者

    我在全新安装 gitlab 时遇到此错误 该消息如下所示 fatal unable to access https gitlab ci token email protected cdn cgi l email protection som
  • 用于事件驱动通信的 SQL CLR

    我工作的地方他们正在使用长轮询检测数据库中发生的事件的技术 虽然它有效 我认为每个人都会同意轮询数据库并不是最佳选择 我宁愿尝试某种推送技术或技巧 因此 我正在考虑使用表触发器打电话给SQL CLR将事件放入队列或调用 Web 服务的对象
  • Angular 子组件 ng-invalid

    我正在创建一个自定义输入组件 该组件通过实现实现形式兼容ControlValueAccessor 该输入组件是一个或多个子输入的组合 但我无法获取ng invalid要传播给子级的 CSS 类input元素 我的自定义输入组件有一个类似的模
  • ASP MVC Less 文件给出: 调用目标已引发异常

    我有一个简单的 asp net mvc 4 站点 使用较少的文件 当我在本地电脑上运行它时 它工作正常 但是当我将其发布到服务器时 我收到以下错误 During the output text content of processed as
  • 更改 iframe 上的鼠标光标

    我想将鼠标光标从手动状态取消为默认状态 其中出现白色箭头 我有一个简单的 iframe 但我认为 iframe 内有一个链接导致光标更改为指针 手 我该如何更改该行为 这不起作用 iframe cursor default 如果您可以访问
  • R 防止饼图中重叠

    我的数据是这样的 VariantClass PASS ONTARGET Silent 50 30 Missense 47 00 Nonsense 0 74 Startloss 0 26 Stoploss 0 74 Frameshift in
  • 如何在 Python 中使用 LXML 捕获 XML 文件的所有元素名称?

    我能够使用 lxml 来完成我想做的大部分事情 尽管浏览令人困惑的示例和教程很困难 简而言之 我能够读取外部 xml 文件并通过 lxml 将其导入正确的树状格式 为了证明这一点 如果我输入 print etree tostring myX
  • Mongoose 连接两个集合并仅从连接的集合中获取特定字段

    我在加入猫鼬中的两个集合时遇到问题 我有两个集合 即 学生和考试 学生模型 fullname type String required true email type String required true 考试模式 test type
  • 我应该如何在 HTML 中表达 15/16 之类的分数?

    我知道有 1 2 1 4 和 3 4 的 HTML 实体 但是还有其他实体吗 比如 1 3 还是 1 8 有没有一种好方法来编码任意分数 how about 15 16
  • data.table 按引用赋值`:=` 的标准形式和函数形式的不同结果

    标准中的 data tabel 通过引用 赋值与函数形式之间似乎存在细微差别 标准形式将 RHS 强制为向量 而函数形式则不然 一个细节 但我认为没有记录 library data table dt lt data table a c a
  • 将 int 转换为字节数组时的 C++ 字节顺序

    鉴于我的平台是小端字节序 我假设四字节整数值 1 将表示为0x00 0x00 0x00 0x01当表示为字节数组时 这样 有人可以向我解释为什么以下断言失败 int val 1 auto bytes reinterpret cast
  • 如何将android中捕获的图像保存到php?

    我们已经在 android 和 php 上尝试过这个代码 请看下面的代码 Android Scn setOnClickListener new OnClickListener Override public void onClick Vie
  • 带有对数刻度的更好的刻度和刻度标签

    我正在尝试获得更好看的双对数图 除了一个小问题之外 我几乎得到了我想要的 我的示例偏离标准设置的原因是 x 值限制在不到十年的范围内 并且我想使用十进制 而不是科学记数法 请允许我用一个例子来说明 import matplotlib pyp