Python 如何在matplotlib中设置次轴的xtick位置?

Python 如何在matplotlib中设置次轴的xtick位置?,python,numpy,matplotlib,plot,figure,Python,Numpy,Matplotlib,Plot,Figure,我想在顶部创建一个次级X轴,它与底部的主X轴成反比关系。我遵循官方教程,并拥有以下代码: 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.arr

我想在顶部创建一个次级X轴,它与底部的主X轴成反比关系。我遵循官方教程,并拥有以下代码:

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

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

不清楚你想要实现什么

如果您希望顶部有一个线性关系,这可能是相关的:

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()

我认为要么您错过了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

你为什么不知道它们在什么地方?我看到70在0.14之上。。在我看来这是正确的。你希望看到什么?位置是对的,但我想控制有多少蜱。现在,上面的代码在左边给出了太多的记号。您的代码对我来说运行良好。尝试更新matplotlib。@lostin我的matplotlib版本为3.1.3。由于某些原因,我无法将其升级到最新的3.2.1版本,因此现在我正在寻找其他方法来控制哪些记号出现。顶轴不提供线性关系,它们位于正确的位置。我想要的是控制有多少个刻度。你说的“顶轴不提供线性关系”是什么意思?很明显,20和40之间的空间是10和20之间的两倍,使用相同的比较,40和70之间的空间是3倍。此外,两个函数的参数都是线性的。考虑到OP更新,问题确实不在代码中,我同意这是正确的。