【问题标题】:How to set the xtick position for secondary axis in matplotlib?如何在 matplotlib 中设置辅助轴的 xtick 位置?
【发布时间】:2020-04-22 21:15:10
【问题描述】:

我想在顶部创建一个辅助 xaxis,它与底部的主要 xaxis 成反比关系。我按照官方教程here,代码如下:

def forward(x):
    return 10/x

def backward(y):
    return 10/y

fig, ax = plt.subplots()
ax.set_xlim([0.14, 1.4])
secax = ax.secondary_xaxis('top', functions=(forward, backward))
secax.set_xticks(np.array([10,20,40,70]))  # does not work!
plt.show()

问题是顶部的 xticks 不在正确的位置。由于应用了反函数,它们在左侧聚集在一起。如何手动设置 xticks 的位置? (例如在 10,20,40,70)

编辑: 只是为了更清楚一点,刻度在正确的位置,但是如图所示刻度太多。在这种情况下,我只想要 10、20、40、70 的刻度(我不想要 30、50 和 60 的刻度,因为我们无法清楚地看到所有刻度数字)

【问题讨论】:

  • 为什么他们不在正确的地方?我看到 70 在 0.14 之上 .. 这对我来说是正确的。您希望看到什么?
  • 位置在正确的位置,但我想控制有多少滴答声。现在上面的代码在左边给出了太多的刻度。
  • 您的代码对我来说运行良好。尝试更新你的 matplotlib。
  • @lostin 我的 matplotlib 是 3.1.3 版。由于某种原因,我无法将其升级到最新的 3.2.1,所以现在我正在寻找替代方法来控制出现哪些刻度。

标签: python numpy matplotlib plot figure


【解决方案1】:

我相信要么你错过了 numpy 的导入语句,要么你需要更新你的 matplotlib。下面对我来说很好 -

import matplotlib.pyplot as plt
import numpy as np

def forward(x):
    return 10/x

def backward(y):
    return 10/y

fig, ax = plt.subplots()
ax.set_xlim([0.14, 1.4])
secax = ax.secondary_xaxis('top', functions=(forward, backward))
secax.set_xticks(np.array([10,20,40,70]))  # does not work!
plt.show()

检查你的版本 -

import matplotlib
print (matplotlib.__version__)

如果上面没有打印 3.2.1。试试下面 -

 pip install matplotlib==3.2.1

【讨论】:

  • 考虑到OP更新,问题确实不在于代码,我同意这是正确的。
【解决方案2】:

不清楚你想达到什么。

如果您想在顶部建立线性关系,这可能是相关的:

import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.set_xlim([0.14, 1.4])
secax = ax.secondary_xaxis('top', functions=(lambda x: 77 - 50 * x,
                                             lambda y: (77 - y) / 50))
secax.set_xticks(np.array([10, 20, 40, 70]))
plt.show()

【讨论】:

  • 顶轴没有给出线性关系,它们在正确的位置。我想要的是控制有多少滴答声。
  • “顶轴没有给出线性关系”是什么意思?很明显,20 和 40 之间的空间是 10 和 20 的两倍,而 40 和 70 之间的空间是相同的比较的三倍。此外,这两个函数的参数都是线性的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
相关资源
最近更新 更多