我正在绘制文本文件中的数据,其中两列由逗号分隔。第一列是以%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()
简介:
答案 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')