如何在Matplotlib中添加第二个X轴

发布于 2021-01-29 14:57:39

我有一个非常简单的问题。我需要在绘图上有第二个x轴,并且我希望该轴具有一定数量的tic,它们对应于第一个x轴的特定位置。

让我们尝试一个例子。在这里,我将暗物质质量绘制为膨胀系数(定义为1 /(1 + z))的函数,该膨胀系数的范围为0到1。

semilogy(1/(1+z),mass_acc_massive,'-',label='DM')
xlim(0,1)
ylim(1e8,5e12)

我想在图的顶部放置另一个x轴,以显示对应于某些膨胀系数值的z轴。那可能吗?如果是的话,我怎么能拥有xtics斧头

关注者
0
被浏览
91
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我正在从@Dhara答案中的注释中获取线索,这听起来像是您要按new_tick_locations功能设置从旧x轴到新x轴的列表。在tick_function下面发生在点的numpy的阵列,它们映射到一个新的值,并且将它们格式化:

    import numpy as np
    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    ax2 = ax1.twiny()
    
    X = np.linspace(0,1,1000)
    Y = np.cos(X*20)
    
    ax1.plot(X,Y)
    ax1.set_xlabel(r"Original x-axis: $X$")
    
    new_tick_locations = np.array([.2, .5, .9])
    
    def tick_function(X):
        V = 1/(1+X)
        return ["%.3f" % z for z in V]
    
    ax2.set_xlim(ax1.get_xlim())
    ax2.set_xticks(new_tick_locations)
    ax2.set_xticklabels(tick_function(new_tick_locations))
    ax2.set_xlabel(r"Modified x-axis: $1/(1+X)$")
    plt.show()
    

    在此处输入图片说明



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看