【问题标题】:How do you change the x-axis scale/ticks in a bar chart with time values in the x-axis?如何更改条形图中的 x 轴刻度/刻度,x 轴为时间值?
【发布时间】:2020-05-29 11:50:18
【问题描述】:

我有一个如下所示的数据框:

Time                                  Instances
00:32:00                              1
00:35:00                              1
00:51:00                              1
01:51:00                              1
04:08:00                              1
05:13:00                              1
05:14:00                              1
05:34:00                              1
05:51:00                              1
07:36:00                              1
07:53:00                              1
08:20:00                              1
09:34:00                              1
10:01:00                              1
10:18:00                              1
10:38:00                              1
10:51:00                              1
11:15:00                              1
12:14:00                              1
13:16:00                              1
13:28:00                              1
13:51:00                              1
15:56:00                              1
16:22:00                              1
16:35:00                              1
17:19:00                              1

我想绘制此图,但我希望 x 轴上的“刻度”为 00:00:00,04:00:00,08:00:00,12:00:00,16:00 :00,20:00:00,23:59:00。所以我从这段代码开始('t' 是我的数据框的名称)。

编辑:添加加载数据的部分代码。

import pandas as pd
from datetime import date, timedelta
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
from matplotlib import cm
import random
import datetime
df=pd.read_csv(path)
df['Time']= pd.to_datetime(df['Time'])
df=df.sort_values("Time")
df.Time = df.Time.map(lambda x: x.replace(second=0))
df['Time'] =df['Time'].dt.time
t=df['Time'].value_counts().reset_index()
t.columns=['Time','Instances']
t=t.sort_values("Time")
ax = t.plot(x='Time',y='Instances',kind='bar', title ="Number of Instances By Time of Day", figsize=(20, 10), legend=True, fontsize=12)
ax.set_xticks([datetime.time(0,0,0,0),datetime.time(4,0,0,0),datetime.time(8,0,0,0),datetime.time(12,0,0,0),datetime.time(16,0,0,0),datetime.time(20,0,0,0),datetime.time(23,59,0,0)])
ax.set_xticklabels([datetime.time(0,0,0,0),datetime.time(4,0,0,0),datetime.time(8,0,0,0),datetime.time(12,0,0,0),datetime.time(16,0,0,0),datetime.time(20,0,0,0),datetime.time(23,59,0,0)])

但是,当我运行此代码时,我得到一个空白图表。

希望解决此问题并提供任何帮助!

【问题讨论】:

  • 请同时提供数据加载(例如 csv/excel 读取和日期时间转换,如果已完成)
  • @Nikaido 添加了那部分代码。

标签: python pandas datetime matplotlib


【解决方案1】:

我认为问题出在别名上,因为我看不到 't' 的别名是什么?

ax = t.plot(x='Time',y='Instances',kind='bar', title ="Number of Instances By Time of Day", figsize=(20, 10), legend=True, fontsize=12)

不如试试

ax = plt.plot(x='Time',y='Instances',kind='bar', title ="Number of Instances By Time of Day", figsize=(20, 10), legend=True, fontsize=12)

【讨论】:

  • 当我做 plt.plot(x=t['Time'],y=t['Instances'],kind='bar',title='Number of Instances By Time of Day' ,figsize=(20,10),legend=True,fontsize=12) 我收到错误:set_xticks 代码行上的“AttributeError: 'list' object has no attribute 'set_xticks'”。
  • 那么为什么要使用 x=t[time] ?放在列表里有什么用
  • 这不是我得到错误的地方。当我执行 ax.set_xticks([datetime.time(0,0,0,0),datetime.time(4,0,0,0),datetime.time(8,0) 时,错误出现在下一行代码上,0,0),datetime.time(12,0,0,0),datetime.time(16,0,0,0),datetime.time(20,0,0,0),datetime.time(23 ,59,0,0)])。即使我不这样做 t['Time'] 我仍然会遇到同样的错误。
  • 您可以尝试的最后一件事是首先尝试通过更改 ax = t.plot(x='Time',y='Instances',kind='bar', title ="Number实例的时间”,figsize=(20, 10),legend=True,fontsize=12)。到。 ax.plot(x='Time',y='Instances',kind='bar', title="一天中的实例数", figsize=(20, 10), legend=True, fontsize=12) .看看天气你是否会打勾
  • 因为我在您的代码中没有发现任何问题,而且我一直在使用刻度。所以这就是为什么说你这样做,伙计。
猜你喜欢
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 2015-07-13
  • 2019-09-06
相关资源
最近更新 更多