Matplotlib 将辅助 x 轴移动到特定位置

问题描述 投票:0回答:1

以下MWE

import matplotlib

matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

# Use latex
import os
os.environ["PATH"] += os.pathsep + '/usr/local/texlive/2024/bin/x86_64-linux'

if __name__ == '__main__':
    plt.rcParams.update({
    "text.usetex": True,
    "font.family": "serif",
    "font.serif": "Computer Modern Roman",
    })

    test_data = 10
    test_data_2 = 24

    # Create plot and axis
    fig, ax = plt.subplots()

    # Plot
    ax.plot([i for i in range(test_data)], [i for i in range(test_data)], label="Test")
    ax.tick_params(bottom=False)

    # Define x axis
    x_axis = ['30', '40', '50'] * (test_data_2 // 3)
    ax.set_xticks(range(len(x_axis)), labels=(x_axis))

    # Add second x axis
    sec2 = ax.secondary_xaxis(location=0)
    sec2.set_xticks([5.5 + 12 * i for i in range(test_data_2 // 12)],
                    labels=[f'\n\n{5 + i * 5}' for i in range(test_data_2 // 12)])
    sec2.tick_params('x', length=0)

    plt.show()

结果如下图 enter image description here

我现在希望能够精确地将辅助 x 轴向上移动一点(而不是使用不精确的 ' ')。这怎么可能,或者我应该使用完全不同的方法来获取辅助 x 轴?

编辑:正如评论中所问:辅助轴的目的实际上只是为了能够添加多层 xticklabels。

python matplotlib plot x-axis
1个回答
0
投票

您可以使用

location
 函数的 
secondary_xaxis
参数来定位第二个轴。

位置

{'top', 'bottom', 'left', 'right'}
float

放置次轴的位置。对于orientation='x',字符串可以是'top'或'bottom',对于orientation='y',字符串可以是'right'或'left'。浮点数表示放置新轴在父轴上的相对位置,0.0 为底部(或左侧),1.0 为顶部(或右侧)。

为了将其移动到主 x 轴下方,我们可以使用一个小的负数。

例如:

sec2 = ax.secondary_xaxis(location=-0.07)
sec2.set_xticks([5.5 + 12 * i for i in range(test_data_2 // 12)],
                labels=[f'{5 + i * 5}' for i in range(test_data_2 // 12)])
sec2.tick_params('x', length=0)

产量:

secondary x-axis moved with location parameter

要删除水平线,我们可以将轴的底部脊柱的可见性设置为 False:

sec2 = ax.secondary_xaxis(location=-0.07)
sec2.set_xticks([5.5 + 12 * i for i in range(test_data_2 // 12)],
                labels=[f'{5 + i * 5}' for i in range(test_data_2 // 12)])
sec2.tick_params('x', length=0)
sec2.spines['bottom'].set_visible(False)

removed spine

© www.soinside.com 2019 - 2024. All rights reserved.