Несколько строк меток x tick в matplotlib

Я пытаюсь сделать сюжет, похожий на этот пример excel:

example

Я хотел бы знать, есть ли у вас второй слой на ярлыках x tick (например, "5-летнее статистическое резюме" ). Я знаю, что я могу создавать метки многострочного тика, используя \n, но я хочу, чтобы иметь возможность сдвигать два уровня независимо.

Ответ 1

это близко:

xtick

fig = plt.figure( figsize=(8, 4 ) )
ax = fig.add_axes( [.05, .1, .9, .85 ] )
ax.set_yticks( np.linspace(0, 200, 11 ) )

xticks = [ 2, 3, 4, 6, 8, 10 ]
xticks_minor = [ 1, 5, 7, 9, 11 ]
xlbls = [ 'background', '5 year statistical summary', 'future build',
          'maximum day', '90th percentile day', 'average day' ]

ax.set_xticks( xticks )
ax.set_xticks( xticks_minor, minor=True )
ax.set_xticklabels( xlbls )
ax.set_xlim( 1, 11 )

ax.grid( 'off', axis='x' )
ax.grid( 'off', axis='x', which='minor' )

# vertical alignment of xtick labels
va = [ 0, -.05, 0, -.05, -.05, -.05 ]
for t, y in zip( ax.get_xticklabels( ), va ):
    t.set_y( y )

ax.tick_params( axis='x', which='minor', direction='out', length=30 )
ax.tick_params( axis='x', which='major', bottom='off', top='off' )

Ответ 2

Я не могу прокомментировать ответ behzad из-за отсутствия репутации. Я нашел, что его решение очень полезно, но я думал, что я поделюсь этим, вместо того, чтобы контролировать вертикальное выравнивание с помощью set_y(), я просто добавил символ новой строки для вертикального смещения меток. Итак, для приведенного выше примера:

xlbls = [ 'background', '\n5 year statistical summary', 'future build',
      '\nmaximum day', '\n90th percentile day', '\naverage day' ]

Для меня это было лучшим решением для сохранения многослойных меток и многослойных меток по вертикали.

Ответ 3

Лучшим решением, которое я нашел, является использование функции plt.annotate. Здесь описано здесь: в последнем комментарии