我正在尝试使用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
答案 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>