matplotlib 为什么第二个x轴刻度标签不旋转?

6bc51xsx  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(95)

我试图用matplotlib画一个简单的图表。纵轴上有数字,横轴上有日期。出于某种原因,我无法理解,第二个x轴刻度标签拒绝旋转。其余刻度标签旋转得很好。如果我改变了数据,同样的事情会发生......它总是第二个标签拒绝旋转。我已经无计可施了。下面是我的代码:

import datetime
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
from matplotlib.dates import MonthLocator, DateFormatter
import matplotlib.ticker as ticker

plt.rcdefaults()
fig, ax = plt.subplots()
fig.set_size_inches(6.5, 3)

# Example data
values = [ 270, 318, 349, 322, 433, 444, 459, 481, 449, 558, 575, 843]
dlist = [ datetime.datetime(2020,10,1), datetime.datetime(2020,11,1), datetime.datetime(2020,12,1), datetime.datetime(2021,1,1), datetime.datetime(2021,2,1), datetime.datetime(2021,3,1), datetime.datetime(2021,4,1), datetime.datetime(2021,5,1), datetime.datetime(2021,6,1), datetime.datetime(2021,7,1), datetime.datetime(2021,8,1), datetime.datetime(2021,9,1)]
ax.set_box_aspect(.25)
ax.xaxis.set_major_locator(MonthLocator(interval=1))
ax.xaxis.set_major_formatter(DateFormatter('%b %Y'))
ax.yaxis.set_major_locator(ticker.FixedLocator([0, 200, 400, 600, 800, 1000]))

plt.setp(ax.get_xticklabels(), fontsize=8, rotation=45, ha='right')
plt.setp(ax.get_yticklabels(), fontsize=8)
ax.set_ylabel('Attack Volume', fontsize=10)

ax.set_xlim(dlist[0], dlist[-1])
ax.set_ylim(0,1000)
ax.grid(True)

ax.set_title('Figure 1: Attack Volume Trend', fontsize=12)
ax.plot(dlist, values, 'o-')
plt.show()

我看到的是:

抱歉,链接而不是嵌入图像-我是一个新的StackOverflow用户,所以他们不会让我嵌入任何东西。我做错了什么?
我在MacOS Big Sur 11.5.2(20 G95)上使用matplotlib-3.4.3。

yhuiod9q

yhuiod9q1#

好吧我想明白了我得打个电话

plt.setp(ax.get_xticklabels(), fontsize=8, rotation=45, ha='right')
plt.setp(ax.get_yticklabels(), fontsize=8)
ax.set_ylabel('Attack Volume', fontsize=10)

在我打电话之前

ax.xaxis.set_major_locator(MonthLocator(interval=1))
ax.xaxis.set_major_formatter(DateFormatter('%b %Y'))
ax.yaxis.set_major_locator(ticker.FixedLocator([0, 200, 400, 600, 800, 1000]))

下面的代码是这样的:

#!/usr/bin/env python3
import datetime
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
from matplotlib.dates import MonthLocator, DateFormatter
import matplotlib.ticker as ticker

plt.rcdefaults()
fig, ax = plt.subplots()
fig.set_size_inches(6.5, 3)

# Example data
values = [ 270, 318, 349, 322, 433, 444, 459, 481, 449, 558, 575, 843]
dlist = [ datetime.datetime(2020,10,1), datetime.datetime(2020,11,1), datetime.datetime(2020,12,1), datetime.datetime(2021,1,1), datetime.datetime(2021,2,1), datetime.datetime(2021,3,1), datetime.datetime(2021,4,1), datetime.datetime(2021,5,1), datetime.datetime(2021,6,1), datetime.datetime(2021,7,1), datetime.datetime(2021,8,1), datetime.datetime(2021,9,1)]

plt.setp(ax.get_xticklabels(), fontsize=8, rotation=45, ha='right')
plt.setp(ax.get_yticklabels(), fontsize=8)
ax.set_ylabel('Attack Volume', fontsize=10)

ax.set_box_aspect(.25)
ax.xaxis.set_major_locator(MonthLocator(interval=1))
ax.xaxis.set_major_formatter(DateFormatter('%b %Y'))
ax.yaxis.set_major_locator(ticker.FixedLocator([0, 200, 400, 600, 800, 1000]))

ax.set_xlim(dlist[0], dlist[-1])
ax.set_ylim(0,1000)
ax.grid(True)

ax.set_title('Figure 1: Attack Volume Trend', fontsize=12)
ax.plot(dlist, values, 'o-')
plt.show()

相关问题