加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 格式化pandas y轴以显示时间而不是总秒数

发布时间:2020-12-20 11:04:01 所属栏目:Python 来源:网络整理
导读:我在数据框中有测量.列是不同的对象. Index是datetime64索引.现在,对于每个日期,我对每列的总秒数(int)进行了测量. 一切都很好,我唯一的问题,而不是在y轴上显示6000秒我想显示1:40表示1小时40分钟. 我怎么能真正实现这个目标? day Object1 Object22017-01-0
我在数据框中有测量.列是不同的对象. Index是datetime64索引.现在,对于每个日期,我对每列的总秒数(int)进行了测量.

一切都很好,我唯一的问题,而不是在y轴上显示6000秒我想显示1:40表示1小时40分钟.

我怎么能真正实现这个目标?

day         Object1  Object2
2017-01-01     6000     1234

我想要

day         Object1  Object2
2017-01-01  1:40:00  00:20:34

你能否告诉我如何做到这一点

解决方法

这是可能的,但本机不支持 ploting timedelta.

df['Object1'] = pd.to_timedelta(df['Object1'],unit='s')
df['Object2'] = pd.to_timedelta(df['Object2'],unit='s')

要么:

cols = ['Object1','Object2']
df[cols] = df[cols].apply(lambda x: pd.to_timedelta(x,unit='s'))
print (df)
          day  Object1  Object2
0  2017-01-01 01:40:00 00:20:34

但FuncFormatter是可能的:

df = pd.DataFrame({'Object1': [6000,4000,3000],'Object2':[3000,5000,2110]})

import matplotlib.ticker as tkr
import datetime

def func(x,pos):
    return str(datetime.timedelta(seconds=x))
fmt = tkr.FuncFormatter(func)


ax = df.plot(x='Object1',y='Object2',rot=90)
ax.xaxis.set_major_formatter(fmt)
ax.yaxis.set_major_formatter(fmt)

graph

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读