如何将x轴格式化为与此图类似?

时间:2016-01-26 01:06:11

标签: python pandas matplotlib

我有从this直方图获得的麻疹病例数据。我想为我正在撰写的论文重新创建这个情节。

我使用pandas加载数据。

import pandas as pd
import matplotlib.pyplot as plt    
df = pd.read_csv('measles_data.csv')
df['Date'] = df['Date'].apply( lambda x: datetime.datetime.strptime( j, "%Y-%m-%d")
df.set_index('Date', inplace = True)
df.hist()

plt.show()

这不会产生像链接图片那样格式化的x轴。

我也尝试过与

相似的东西
x = [j.day() for j in df.Date]
y = df['Confirmed Cases'].as_matrix()
ax.bar(x,y)
ax.xaxis_date()

但我无法区分月份的开始和结束时间。有人可以推荐一种格式化x轴的方法,类似于我链接的图片吗?

1 个答案:

答案 0 :(得分:0)

有趣的问题。

我真的不知道任何能做这种事情的命令或设置。所以我在matplotlib中使用了乳胶作为文本框,这样我就可以将它放在我想要的任何地方。

import datetime
import random
import matplotlib.pyplot as plt

from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('text', usetex=True)

date1 = datetime.date(2003, 1, 5)
date2 = datetime.date(2003, 3, 1)

x = [date1, date2]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

fig, ax = plt.subplots(1)

textstr = r"$\overbrace{}^{Sometext}"

ax.text(0.1, 0.1, textstr, transform=ax.transAxes, fontsize=20,
        verticalalignment='top')

plt.plot(x, y)
plt.gcf().autofmt_xdate()

plt.show()

输出是:

enter image description here

我不知道怎么做"一月,二月,......" xlabel中的子部分。如果它很重要,你可以稍后用photoshop添加它:D希望这有帮助!