用微秒分辨率绘制pandas数据帧

时间:2016-03-23 15:47:59

标签: python pandas matplotlib

我正在尝试使用python matplotlib来绘制pandas DataFrame。 DataFrame有一个'time'列和一个'val'列。 'time'列设置为索引,分辨率高达微秒。当我绘制它时,x轴上的值完全关闭(超出数据的时间范围)。可能有什么不对?任何帮助表示赞赏。

以下是代码:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates

df = pd.read_csv("/tmp/a.csv")
df = df.set_index('time')

def plot1(df):
    ax = df.plot(y='val')
    ax.get_yaxis().get_major_formatter().set_useOffset(False)
    ax.get_xaxis().set_major_formatter(matplotlib.dates.DateFormatter("%H%M%S.%f"))
    plt.show()
    return ax

plot1(df)

'/tmp/a.csv'中的数据:

time,val
143642.229348,12
143642.250195,53
143642.252341,17
143642.254349,56
143642.311674,31
143642.313758,36
143642.320217,24
143642.339777,86

1 个答案:

答案 0 :(得分:1)

从CSV文件中读取后,您需要将time列转换为datetime

df['time'] = pd.to_datetime(df['time'], format="%H%M%S.%f")

或者,您可以在解析CSV文件时动态执行此操作:

tm_parser = lambda x: pd.to_datetime(x, format="%H%M%S.%f")

df = pd.read_csv('/tmp/a.csv',
                 sep=',',
                 parse_dates=['time'],
                 date_parser=tm_parser,
                 index_col='time')

之后你不需要matplotlib.dates.DateFormatter

In [147]: df.plot()
Out[147]: <matplotlib.axes._subplots.AxesSubplot at 0x8201f60>

Plot