[英]How can I "fake" the axis ticks in matplotlib?
也就是说,我想将数据点精确地保留在它们在第一个图中的位置,但将 x 轴刻度和标签替换为第二个图中的刻度和标签。 (在这种情况下,它们是用plt.xscale('symlog')
。)我似乎找不到一种直接的方法来做到这一点。 有吗?
注意:它不应该真的需要说,但是这个问题中的情节不是我的实际情节,我确实有理由想要这样做。 我很高兴澄清我提出的问题,但我认为询问我为什么需要它的详细信息没有帮助。 问题是关于如何做我问过的具体事情如何做,并且对主题的回答表示赞赏。
我认为这个问题需要一种解决方法,以避免将数据转换为所需的规模。 通过在绘图之前将反函数应用于数据,这应该非常简单。 然而,问题中没有提供足够的信息来说明这种解决方案的问题是什么。
因此,人们只能按原样回答问题; 这基本上转化为创建一个完全不相关的轴。
import numpy as np
import matplotlib.pyplot as plt
x,y = np.random.rand(2,30)
fig, ax = plt.subplots()
ax.plot(x,y, ls="", marker="+")
ax2 = ax.twiny()
ax2.set_xscale("symlog")
ax2.tick_params(axis="x", which="both", bottom=True, labelbottom=True,
top=False, labeltop=False)
ax.tick_params(axis="x", bottom=False, labelbottom=False)
ax2.set_xlim(-50,50)
plt.show()
这里 x 限制是任意选择的。 问题是将限制与原始数据相关联。 由于双方都有 5% 的默认余量,这通常不是微不足道的,执行此任务的任何函数都将比计算原始数据逆变换的函数复杂得多。
您可以像这样简单地设置 xticks 的标签。
plt.xticks(np.arange(3), [10, 10^2, 10^5])
如果将来有人遇到同样的问题,这里有一个有效的解决方案。 我不知道这是不是最好的方法。
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
# use ax1 to plot the data
ax1.axes("off")
ax2 = fig.add_axes(ax1.get_position())
ax2.patch.set_alpha(0)
# then do whatever you want to set up the axes of ax2. In my case:
ax1_xlim = ax1.get_xlim()
ax2.set_xlim([-np.power(10,-ax1_xlim[0]), np.power(10,ax1_xlim[1])])
我不明白为什么所有的评论和其他答案都如此关注这个简单任务的“为什么”。 尽管有很多噪音,但我希望这对其他人有帮助。
ImportanceOfBeingErnest 说这是一个重新缩放的问题,我同意他的观点。
一般原则
据我了解,您正在尝试执行以下操作:
注意:您可以编写 x' = g(x) 另一个函数,然后让 y = f ( g(x) ) 您只需要知道这个 g 函数即可重新缩放。
我再说一遍,我将此问题视为单位更改问题。 所以答案取决于问题、它的性质、它的参数。 这就是隐藏在这个 g 函数背后的东西。
几乎是您需要的答案
在你的情况下,根据你展示的情节,我可以给你一个大概的答案:
x' = 10 * ( x - 0.5)
np.semilogx(x',y)
0.5 因为新的 0 似乎是您拥有 0.5 的地方。 我减去以将新点集中在 0.5 中。 10 * 因为您将 0.1 转换为 10^0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.