在Python中格式化X轴时间

时间:2015-11-05 22:01:34

标签: python csv unix matplotlib

我正在绘制文本文件中的数据,其中两列由逗号分隔。第一列是以%H:%S格式化的时间。第二行是数字。

目前,我的编码显示%Y%m%d %H:%M:%s而不是%H:%M。如您所见,有很多条目,它们相互重叠。如何让刻度线每1或2跳过一次以使时间更明显?

我该如何纠正?

文件内容:

09:30,33.89
09:34,34.17
09:39,34.41
09:44,34.20
09:49,34.40

脚本:

#!/usr/bin/python
from __future__ import division
import sys
import csv
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import datetime as dt
import numpy as np

homedir = '/home//'

ymd = sys.argv[1]
sym = sys.argv[2]

x,y = [],[]
csv_reader = csv.reader(open(homedir + 'finance/data/' + sym + '_' + ymd))
for line in csv_reader:
    x.append(dt.datetime.strptime(line[0], '%H:%M'))
    y.append(str(line[1]))

fig = plt.figure()
ax = fig.add_subplot(111)

#ax.grid(which='both')

ax.plot(x,y,'-',ms=3,linewidth=1)
#fig.autofmt_xdate(x,rotation=90,ha='center')
plt.xticks(x, x, rotation=90,ha='center')
plt.title('Daily Market Data for ' + sym + ' on ' + ymd)
plt.ylabel('Stock Price [$]')
plt.xlabel('Time of Day')
plt.grid(True)

fig.set_size_inches(9,5)

plt.savefig(homedir + 'finance/' + sym + '_' + ymd + '.png', dpi = 300, bbox_inches='tight')
#plt.show()

简介:

enter image description here

1 个答案:

答案 0 :(得分:2)

.#webclasspath使用第二个参数将字符串时间解析为<WPFMediaKit:VideoCaptureElement x:Name="videoCapElement" LoadedBehavior="Play" DesiredPixelWidth="320" DesiredPixelHeight="240" Stretch="Fill" VideoCaptureSource="{Binding Path=CaptureDeviceName}" FPS="30" /> 对象,以将原始字符串中的值映射到datetime.strptime()组件。这里有一些指南解释了strptime()strftime()之间的区别。

无论如何,我猜你可以使用datetime的原始字符串,并留下为你的情节单独构建datetime列表的行,因为它似乎可以正常工作。

尝试将xticks循环部分更改为:

x

然后,当然,摆脱您的其他for作业并将x,y,xticks = [],[],[] csv_reader = csv.reader(open(homedir + 'finance/data/' + sym + '_' + ymd)) for line in csv_reader: xticks.append(line[0]) x.append(dt.datetime.strptime(line[0], '%H:%M')) y.append(str(line[1])) 来电更改为:

xticks

编辑:OP在问题中添加了一些简短的建议。

也许在你的plt.xticks循环中做一些hacky,比如

plt.xticks(x, xticks, rotation=90,ha='center')