Python matplotlib中的多行x记号标签

Python matplotlib中的多行x记号标签,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我试图绘制一个类似于此excel示例的绘图: 我想知道x记号标签上是否有第二层(例如“5年统计摘要”)。我知道我可以使用\n制作多行刻度标签,但我希望能够独立地移动两个级别。我找到的最佳解决方案是使用plt.annotate功能。这里描述得很好:这很接近: fig = plt.figure( figsize=(8, 4 ) ) ax = fig.add_axes( [.05, .1, .9, .85 ] ) ax.set_yticks( np.linspace(0, 200, 11 ) )

我试图绘制一个类似于此excel示例的绘图:


我想知道x记号标签上是否有第二层(例如“5年统计摘要”)。我知道我可以使用
\n
制作多行刻度标签,但我希望能够独立地移动两个级别。

我找到的最佳解决方案是使用
plt.annotate
功能。这里描述得很好:

这很接近:

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' )


由于缺乏声誉,我无法对贝扎德的回答发表评论。我发现他的解决方案非常有用,但我想我应该分享一下,我没有使用set_y()来控制垂直对齐,而是添加了一个换行符来垂直偏移标签。因此,对于上述示例:

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

对我来说,这是一个更好的解决方案,可以保持多行标签和多层标签垂直对齐。

由于声誉问题,我也无法发表评论,但对behzad的回答有一个小的修正

tick_params()'bottom'和'top'关键字采用布尔值,而不是字符串(至少对于py3.6)。例如,对我使用bottom='off'仍然会产生刻度,而使用bottom=False会删除刻度

因此,替换

ax.勾选参数(axis='x',which='major',bottom='off',top='off')

ax.tick_参数(axis='x',which='major',bottom=False,top=False)


而且它有效

多轴的一个很好的例子是:这足够近吗?这与我想要的相似,但我不希望有第二个物理x轴。我基本上想在第一个轴上添加第二行文本,可以不考虑第一个轴而移动。i、 e.“背景”始终位于同一位置,但“5年总结”可以向左或向右移动,具体取决于添加到图表中的绘图数量。隐藏第二个轴很容易。总的来说,不太清楚你希望事情如何变化。。什么被锁定了什么?您可以使用
文本
注释
脊椎
(即使未显示与这两个轴关联的实际轴)。对您来说,最简单的方法不是取决于您显示的图片,而是取决于您希望将不同项目注册到的内容(无论是缩放绘图还是更改输入)。目前,这一切都还不清楚(即,当你移动“5年总结”时移动了wrt什么?)。