gpt4 book ai didi

python - 第二个 matplotlib x 轴与第一个 : wrong tick position 相关

转载 作者:行者123 更新时间:2023-12-04 17:57:34 26 4
gpt4 key购买 nike

我想向 matplotlib 图添加第二个 x 轴,不是添加第二个图,而是添加链接到第一个轴的标签。 question中的答案不知何故无法解决第二轴范围内的问题:

以下代码将第一个 x 轴的 log10 绘制为第二个轴:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(3,figsize = [5,4])
ax1 = fig.add_subplot(111)
ax1.set_xlabel('first axis')
ax1.set_xlim([0, 120])
ax1.grid(True)

ax2 = ax1.twiny()
ax2.set_xlim(ax1.get_xlim())
# or alternatively :
# ax2.set_xbound(ax1.get_xbound())
second_ticks = np.array([1.,10.,100.])
ax2.set_xticks(second_ticks)
ax2.set_xticklabels(np.log10(second_ticks))
ax2.set_xlabel('second axis')

plt.show()

enter image description here

有效!现在让我们将 ax1.set_xlim([0, 120]) 更改为 ax1.set_xlim([20, 120])

enter image description here

现在失败了。我尝试使用 ax2.set_xbound(ax1.get_xbound()) 没有任何区别。 ax2.set_xticks 无法根据正确的 x 限制放置刻度。

编辑:

我试图将 ax1.set_xlim([20, 120]) 放在 ax2.set_xlim(ax1.get_xlim()) 之后的任何位置,它再次给出了错误的信息:

enter image description here

实际上我不明白 ax2.set_xticks() 的含义,它设置了显示标签的位置 否?

编辑:

好的,我们知道了:x_lim 定义 ax2.set_xlim(ax1.get_xlim()) 必须在 tick 和 ticklabel 定义之后。

import numpy as np
import matplotlib.pyplot as plt

plt.close('all')

fig = plt.figure(1,figsize = [5,4])
ax1 = fig.add_subplot(111)
ax1.set_xlabel('first axis')
ax1.grid(True)
ax1.set_xlim([10, 120])

ax2 = ax1.twiny()

second_ticks = np.array([1.,10.,100.])
ax2.set_xticks(second_ticks)
ax2.set_xticklabels(np.log10(second_ticks))
ax2.set_xlabel('second axis')
ax2.set_xlim(ax1.get_xlim())

fig.tight_layout()

plt.show()

enter image description here

谢谢!

问候,

最佳答案

我相信您会得到意想不到的结果,因为您强制第二个轴上的 x-ticks 和 x-tick-labels 是预定义的。无论您在第二个轴上放置什么作为 x 刻度,它们将始终被标记为:ax2.set_xticklabels(np.log10(second_ticks))。相反,在第一个轴上更新 x-tick-labels 后,更新第二个轴上的 x-tick-labels

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(3,figsize = [5,4])
ax1 = fig.add_subplot(111)
ax1.set_xlabel('first axis')
x = np.linspace(0,100,num=200)
ax1.set_xlim([0, 120])
ax1.grid(True)

ax2 = ax1.twiny()
ax2.set_xlim(ax1.get_xlim())
# or alternatively :
# ax2.set_xbound(ax1.get_xbound())
# second_ticks = np.array([1.,10.,100.])
# ax2.set_xticks(second_ticks)
ax2.set_xlabel('second axis')

# Set the xlim on axis 1, then update the x-tick-labels on axis 2
ax1.set_xlim([20, 100])
ax2.set_xticklabels(np.log10(ax1.get_xticks()))
plt.show()

这是否解决了您的问题? (ps.你的代码有几个错别字……无法运行……)

关于python - 第二个 matplotlib x 轴与第一个 : wrong tick position 相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38999021/

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