在python中从timedelta64对象创建箱线图

在python中从timedelta64对象创建箱线图,python,pandas,matplotlib,Python,Pandas,Matplotlib,我是python新手,习惯于使用R 通常我会创建时间增量的数值向量并构建箱线图。在python中,它似乎有点复杂。 这是我得到的名单的摘录 1502 4 days 17:51:16 1503 4 days 17:51:57 1504 4 days 17:48:24 1505 4 days 17:34:16 1506 4 days 17:32:58 1507 4 days 19:21:27 1508 4 days 19:52:43 1509 4 da

我是python新手,习惯于使用R

通常我会创建时间增量的数值向量并构建箱线图。在python中,它似乎有点复杂。 这是我得到的名单的摘录

1502    4 days 17:51:16
1503    4 days 17:51:57
1504    4 days 17:48:24
1505    4 days 17:34:16
1506    4 days 17:32:58
1507    4 days 19:21:27
1508    4 days 19:52:43
1509    4 days 19:37:17
1510    4 days 21:00:30
1511    5 days 00:56:52
1512    3 days 00:56:04
1513                NaT
Length: 1514, dtype: timedelta64[ns]
我在清单上试过这个:

    # Create a figure instance
fig = plt.figure(1, figsize=(9, 6))

# Create an axes instance
ax = fig.add_subplot(111)

# Create the boxplot
bp = ax.boxplot(timediff)

# Save the figure
fig.savefig('fig1.png', bbox_inches='tight')
我确实得到了一个输出,但它似乎完全错了。有人能帮我吗?数据类型中有错误吗


当前,您的箱线图使用Unix时间(自历元以来经过的秒数,
1970-01-01 00:00:00
)表示您的时差,
timedelta64[ns]
,值。因此,y轴单位为非常大的整数比例:
1e19

考虑将时间差值转换为所需的单位:带小数点的天。然后画出这个系列

timediff = timediff_raw.dt.days + \
              (timediff_raw.dt.seconds//3600) / 24 + \
              ((timediff_raw.dt.seconds//60)%60) / (24*60)

print(timediff.head(10))
注意:非常低的异常值将保持为相同的图形,但具有不同的y轴单位


用可复制的随机种子示例演示:

数据(由50个元素组成的系列)

时差转换(使用)

图形

# Create a figure instance
fig = plt.figure(figsize=(9, 6))

# Create an axes instance
ax = fig.add_subplot(111)

# Create the boxplot
ax.boxplot(timediff)
plt.xlabel('Single Series')
plt.ylabel('Time Difference (Days)')

plt.show()
plt.clf()
plt.close('all')

您的timediff pandas系列只是一个一维系列,因此只有一个箱线图,如图所示,其异常值非常低。请勾画出你想要的结果。你想要y轴上的天数吗?中位数大约是3,5天左右。所以是的。我想看看y轴周围的分布。我知道我只会得到一个箱线图,但显示的分布不可能是真实的。
timediff_raw = (time1 - time2)

timediff = timediff_raw.dt.days + \
              (timediff_raw.dt.seconds / (60*60*24))  # NUMBER OF SECONDS IN A DAY

print(timediff.head(10))
# 0     3.791991
# 1   -43.970498
# 2    41.865208
# 3    24.103646
# 4    -9.031898
# dtype: float64
# Create a figure instance
fig = plt.figure(figsize=(9, 6))

# Create an axes instance
ax = fig.add_subplot(111)

# Create the boxplot
ax.boxplot(timediff)
plt.xlabel('Single Series')
plt.ylabel('Time Difference (Days)')

plt.show()
plt.clf()
plt.close('all')