改变熊猫情节中的xticks

时间:2018-03-27 21:43:46

标签: python python-3.x pandas

我试图在直方图中按小时绘制活动用户数。

这是我的代码:

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标签都是datetime2000_01_01 00:00:00等。

我想将它们改为只是时间(即得到它们然后切断字符串的第一部分),但我无法弄清楚如何做到这一点。

1 个答案:

答案 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))

我更喜欢自己使用子图实例方法,以便明确,特别是在使用多个子图时。