gpt4 book ai didi

matplotlib - 更好的刻度和刻度标签与对数刻度

转载 作者:行者123 更新时间:2023-12-03 16:25:31 26 4
gpt4 key购买 nike

我试图获得更好看的对数图,除了一个小问题外,我几乎得到了我想要的东西。

我的例子抛弃标准设置的原因是 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')

它产生:

Fig1

x轴有两个问题:
  • 使用科学记数法,在这种情况下会适得其反
  • 右下角可怕的“偏移”

  • 经过大量阅读,我添加了三行代码:
    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)

    这产生:

    Fig.2

    我对此的理解是有 5 个小刻度和 1 个主要刻度。它好多了,但仍然不完美:
  • 我想要 1 到 2 之间的一些额外刻度
  • 标签格式为 1 是错误的。它应该是“1.0”

  • 所以我在格式化语句之前插入了以下行:
    ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(0.2))

    我终于得到了我想要的滴答声:

    Fig. 3

    我现在有 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()

    enter image description here

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

    关于matplotlib - 更好的刻度和刻度标签与对数刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46357576/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com