我试图在直方图中按小时绘制活动用户数。
这是我的代码:
import pandas as pd
import datetime
from matplotlib import pyplot as plt
data = [datetime.datetime(2000, 1, 1, 11, 5, 44, 233144), datetime.datetime(2000, 1, 1, 12, 5, 45, 175807), ..]
df = pd.DataFrame(data, columns=['Users'])
df.index = pd.to_datetime(df['Users'])
df.groupby(pd.TimeGrouper(freq='60Min')).count().plot(kind='bar', title = 'Activity by Hour', figsize = (10,8))
plt.xlabel('Time')
plt.ylabel('Number of Users')
plt.show()
这很好用,但我最初只给出了时间数据,而不是日期(我在1/1/2000中添加了每个条目,因为我发现的所有关于使用datetimes
和{{1格式无效;即使用datetime.time
,无法使用pf.to_datetime()
转换为正确的格式。
现在所有xtick标签都是datetime
,2000_01_01 00:00:00
等。
我想将它们改为只是时间(即得到它们然后切断字符串的第一部分),但我无法弄清楚如何做到这一点。
答案 0 :(得分:1)
我相信您应该使用add_subplot()
命令,它可以让您更好地控制数字,并将plt
API命令限制为意图。
我在使用子图和更改xticklabels时添加了几行。
import pandas as pd
import datetime
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(1, 1, 1)
data = [datetime.datetime(2000, 1, 1, 11, 5, 44, 233144), datetime.datetime(2000, 1, 1, 12, 5, 45, 175807)]
df = pd.DataFrame(data, columns=['Users'])
df.index = pd.to_datetime(df['Users'])
plotting_data = df.groupby(pd.TimeGrouper(freq='60Min')).count()
plotting_data.plot(ax=ax, kind='bar')
ax.set_title('Activity by Hour')
ax.set_xlabel('Time')
ax.set_ylabel('Number of Users')
ax.set_xticklabels(list(plotting_data.index.time))
我更喜欢自己使用子图实例方法,以便明确,特别是在使用多个子图时。