numpy Matplotlib具有不同标签和刻度的辅助x轴

yhuiod9q  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(127)

我想用两个x轴画一个图。但是,xtick不对齐。不知何故,边缘被忽略了?!在最终版本中,xlabels是不同的,这意味着简单地在顶部显示轴不是一个选项。

import matplotlib.pyplot as plt
import numpy as np 

fig = plt.figure(figsize=(10.0, 4.0))
axs = fig.subplots(2, 2)

xticklabels = [str(x) for x in range(0, 40+1, 5)]
y = np.random.rand(41*8)
ax0 = axs[0,0].twiny()
axs[0,0].set_xticks(np.arange(0,41*8,5*8))
axs[0,0].set_xticklabels(xticklabels)
ax0.set_xlim(axs[0,0].get_xlim())
ax0.set_xticks(np.arange(0,41*8,5*8))
ax0.set_xticklabels(xticklabels)

axs[0,0].plot(y)

plt.show()

编辑:其实我想有这样的东西:

import matplotlib.pyplot as plt
import numpy as np 

fig = plt.figure(figsize=(10.0, 4.0))
axs = fig.subplots(2, 2)

xticklabels = [str(x) for x in range(0, 40+1, 5)]
y = np.random.rand(41*8)
ax0 = axs[0,0].twiny()
axs[0,0].set_xticks(np.arange(0,41*8,5*8))
axs[0,0].set_xticklabels(xticklabels)
ax0.set_xlim(axs[0,0].get_xlim())
ax0.set_xticks(np.arange(10*8,31*8,5*8))
ax0.set_xticklabels(["0", "25", "50", "75", "100"])

axs[0,0].plot(y)

plt.show()

但你可以看到这些刻度并不对齐。我要疯了!

mkh04yzy

mkh04yzy1#

如果你只想显示第二个x轴(不画任何东西),使用第二个轴可能会更容易。您需要根据需要更改functions

import matplotlib.pyplot as plt
import numpy as np 

y = np.random.rand(41*8)

fig,ax = plt.subplots()
ax.set_xticks(np.arange(0,41*8,5*8))
xticklabels = [str(x) for x in range(0, 41, 5)]
ax.set_xticklabels(xticklabels)

secx = ax.secondary_xaxis('top', functions=(lambda x: x/8, lambda x: x/8))

ax.plot(y)
plt.show()

我假设twiny的问题是由于新Axes上没有数据,但我没有设法让它工作,即使在手动设置数据间隔之后。

根据评论和编辑的问题更新

secx = ax.secondary_xaxis('top', functions=(lambda x: 5*x/8-50, lambda x: 5*x/8-50))
secx.set_xticks([0,25,50,75,100])
secx.set_xticklabels([f'{x}' for x in secx.get_xticks()])

相关问题