在this question之后,我想更改X范围(日期),因此它将从1970年,1980年,.等等(我有一个预定义的事件列表)。我使用下面的代码,日期从1969年开始,到1970年结束(而不是1970年和2020年分别)。尝试2个选项:'事件':'a','b','c','d ',' e ',' f '],第一个选项:
'date':pd.date_range(start='1970', periods=6)
第二种选择:
'date': ['1970', '1980','1990','2000','2010','2020']
下面是完整的代码:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
from datetime import datetime
df = pd.DataFrame(
{
'event': ['a', 'b','c','d','e','f'],
'date': ['1970','1980','1990','2000','2010','2020']
# -> 'date':pd.date_range(start='1970', periods=6)
}
)
df['date'] = pd.to_datetime(df['date'])
levels = np.tile(
[-5, 5, -3, 3, -1, 1],
int(np.ceil(len(df)/6))
)[:len(df)]
fig, ax = plt.subplots(figsize=(12.8, 4), constrained_layout=True);
ax.set(title="A series of events")
ax.vlines(df['date'], 0, levels, color="tab:red"); # The vertical stems.
ax.plot( # Baseline and markers on it.
df['date'],
np.zeros_like(df['date']),
"-o",
color="k",
markerfacecolor="w"
);
# annotate lines
for d, l, r in zip(df['date'], levels, df['event']):
ax.annotate(
r,
xy=(d, l),
xytext=(-3, np.sign(l)*3),
textcoords="offset points",
horizontalalignment="right",
verticalalignment="bottom" if l > 0 else "top"
);
# format xaxis with 4 month intervals
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=4));
ax.xaxis.set_major_formatter(mdates.DateFormatter("%b %Y"));
plt.setp(ax.get_xticklabels(), rotation=30, ha="right");
# remove y axis and spines
ax.yaxis.set_visible(False);
ax.yaxis.set_visible(False);
ax.spines["left"].set_visible(False)
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.margins(y=0.1);
plt.show();
如上所述,我想看到的Xais只有1970年至2020年(没有月和日),并分别其事件(a至f)。
1条答案
按热度按时间wz8daaqr1#
根据注解和我所理解的答案,请参阅下面的完整代码(注意,我刚刚为
year
添加了一行代码,并注解掉了xaxis
部分):输出: