首页 > 解决方案 > 如何旋转 matplotlib xaxis minorticklabel?

问题描述

我正在使用以下代码来旋转 xaxis minorticklabels,但无法使其正常工作。我究竟做错了什么?

fig.autofmt_xdate() 
ax.xaxis.set_major_locator( mdates.WeekdayLocator( byweekday=SU, interval=1, tz=None ) )
ax.xaxis.set_major_formatter( mdates.DateFormatter("%b %d %a", tz=None) )
ax.xaxis.set_minor_locator( mdates.WeekdayLocator( byweekday=(MO, TU, WE, TH, FR, SA), interval=1, tz=None ) )
ax.xaxis.set_minor_formatter( mdates.DateFormatter("%a", tz=None) )
plt.setp( ax.get_xminorticklabels(), rotation=50, ha='right' ) # manual effor to rotate

我试过没有ax.autofmt_xdate()和使用过

plt.setp( ax.get_xticklabels(), rotation=50, ha='right' )

但无济于事。

问题图片:xaxis_minorticklabel_issue

模拟问题的脚本:

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
from matplotlib.dates import MO, TU, WE, TH, FR, SA, SU
from datetime import datetime, timedelta

base = datetime.today()
numdays = 10
date_list = [base - timedelta(days=x) for x in range(numdays)]
ydata = [ 5, 16, 60, 30, 1, 56, 96, 27, 61, 50 ]

fig, ax = plt.subplots( figsize=(10,5), constrained_layout=False)
ax.set(title="Test" )

ax.get_yaxis().set_label_text( label='Y axis', fontweight='bold' )
ax.yaxis.set_major_locator( ticker.MultipleLocator(20) )
ax.yaxis.set_minor_locator( ticker.MultipleLocator(10) )

ax.get_xaxis().set_label_text( label='Days', fontweight='bold' )
plt.setp( ax.get_xminorticklabels(), rotation=50, ha='right' ) # manual control
plt.setp( ax.get_xticklabels(), rotation=50, ha='right' ) # manual control
#fig.autofmt_xdate() 
ax.xaxis.set_major_locator( mdates.WeekdayLocator( byweekday=SU, interval=1, tz=None ) )
ax.xaxis.set_major_formatter( mdates.DateFormatter("%b %d %a", tz=None) )
ax.xaxis.set_minor_locator( mdates.WeekdayLocator( byweekday=(MO, TU, WE, TH, FR, SA), interval=1, tz=None ) )
ax.xaxis.set_minor_formatter( mdates.DateFormatter("%a", tz=None) )
ax.set_xlim( auto=True )  

markerline, stemline, baseline = ax.stem( date_list, ydata, markerfmt='o', linefmt="-", basefmt="k-", label='Data',
                                            use_line_collection=True )

plt.show()

标签: matplotlib

解决方案


推荐阅读