我试图绘制一个类似于Excel示例的图:
我想知道是否有任何方法有第二层的x标记标签(eidogg.“5年统计总结”)。我知道我可以使用\n制作多行刻度标签,但我希望能够独立地移动两个级别。
\n
dgiusagp1#
这就接近了:
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' )
h7wcgrx32#
我无法评论behzad的回答,由于缺乏声誉。我发现他的解决方案非常有帮助,但我想我应该分享一下,我只是添加了一个换行符来垂直偏移标签,而不是使用set_y()来控制垂直对齐。因此,对于上面的示例:
xlbls = [ 'background', '\n5 year statistical summary', 'future build', '\nmaximum day', '\n90th percentile day', '\naverage day' ]
对我来说,这是保持多行标签和多层标签垂直对齐的更好的解决方案。
mm5n2pyu3#
我也无法发表评论,由于声誉,但有一个小修复behzad的答案。tick_params()'bottom'和'top'关键字采用布尔值,而不是字符串(至少对于py3.6是这样)。例如,对我使用bottom = 'off'仍然会产生刻度,而使用bottom = False会删除刻度。因此更换ax.tick_params(axis='x',which='major',bottom='off',top='off')与ax.tick_params(axis='x',which='major',bottom=False,top=False)而且很有效!
uwopmtnx4#
以下是一个Matplotlib参考/示例,用于多个x-tick行:多线它使用了和omegamanda相同的方法
ax1.set_xticks([0.2, 0.4, 0.6, 0.8, 1.], labels=["Jan\n2009", "Feb\n2009", "Mar\n2009", "Apr\n2009", "May\n2009"])
fhity93d5#
我发现的最佳解决方案是使用plt.annotate函数。这里描述得很好:in the last comment
plt.annotate
5条答案
按热度按时间dgiusagp1#
这就接近了:
h7wcgrx32#
我无法评论behzad的回答,由于缺乏声誉。我发现他的解决方案非常有帮助,但我想我应该分享一下,我只是添加了一个换行符来垂直偏移标签,而不是使用set_y()来控制垂直对齐。因此,对于上面的示例:
对我来说,这是保持多行标签和多层标签垂直对齐的更好的解决方案。
mm5n2pyu3#
我也无法发表评论,由于声誉,但有一个小修复behzad的答案。
tick_params()'bottom'和'top'关键字采用布尔值,而不是字符串(至少对于py3.6是这样)。例如,对我使用bottom = 'off'仍然会产生刻度,而使用bottom = False会删除刻度。
因此更换
ax.tick_params(axis='x',which='major',bottom='off',top='off')
与
ax.tick_params(axis='x',which='major',bottom=False,top=False)
而且很有效!
uwopmtnx4#
以下是一个Matplotlib参考/示例,用于多个x-tick行:多线
它使用了和omegamanda相同的方法
fhity93d5#
我发现的最佳解决方案是使用
plt.annotate
函数。这里描述得很好:in the last comment