1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
import sys
import os
import math
import numpy as np
def getAttr(line, which):
beg = line.find(which)
beg = line.find('"', beg)
end = line.find('"', beg+1)
return line[beg+1:end]
# this is from here: http://code.activestate.com/recipes/389639
class Ddict(dict):
def __init__(self, default=None):
self.default = default
def __getitem__(self, key):
if not self.has_key(key):
self[key] = self.default()
return dict.__getitem__(self, key)
# os.system('run-an-external-command')
# os.getcwd()
# os.chdir()
f = open(sys.argv[1],'r')
data = f.readlines()
f.close()
dd = Ddict( lambda: Ddict( lambda: 0))
# f1 = open('raw-results.txt','w')
f1 = open('tmp.txt','w')
for i in range(1,len(data)):
if data[i].find('<interval')!=-1:
ll = data[i].split('"')
nn = int(getAttr(data[i], "nVehContrib"))#int(ll[7])
lane = int(getAttr(data[i], "id")[-1:])#int(ll[5])
tt = float(getAttr(data[i], "begin"))#float(ll[1])
itt = int(tt)
if nn>0:
print >> f1,tt,lane,nn,ll[9],ll[11],ll[13],ll[15]
dd[itt][lane] = nn
f1.close()
maxLanes = 0
dt2OneHour = 6.0
for t in dd.iterkeys():
if len(dd[t])>maxLanes:
maxLanes = len(dd[t])
tVec = np.zeros( len(dd), dtype=int)
QVec = np.zeros( len(dd), dtype=int)
xVec = np.zeros( (len(dd), maxLanes), dtype=float)
qVec = np.zeros( (len(dd), maxLanes), dtype=float)
vecIndx = 0
f = open('lane-shares.txt','w')
#for t,v in dd.items():
for t in sorted(dd.iterkeys()):
# qTot = math.fsum(dd[t])
qTot = sum(dd[t].values())
nrm = 0.0
if qTot:
nrm = 1.0/qTot
s = repr(t) + ' ' + repr(qTot) + ' '
tVec[vecIndx] = t
QVec[vecIndx] = dt2OneHour*qTot
for lane in range(maxLanes):
share = 0.0
if dd[t].has_key(lane):
share = nrm*dd[t][lane]
s = s + repr(share) + ' '
xVec[vecIndx,lane] = share
qVec[vecIndx,lane] = dt2OneHour*dd[t][lane]
# print >> f,t,qTot,lane,share
vecIndx += 1
print >> f, s
f.close()
try:
import matplotlib.pyplot as plt
plt.rcParams['xtick.direction'] = 'out'
plt.rcParams['ytick.direction'] = 'out'
# y =
n = len(qVec)
for lane in range(maxLanes):
desc = 'lane: ' + repr(lane)
plt.plot(tVec, qVec[range(n),lane], label=desc)
# plt.plot(tVec, qVec[range(n),0], 'r-',tVec, qVec[range(n),1], 'g-',tVec, qVec[range(n),2], 'b-')
# plt.plot(tVec, QVec, 'r-')
plt.ylabel('lane flows')
plt.xlabel('time [s]')
plt.legend()
bname = 'flows-over-time-' + repr(maxLanes)
plt.savefig(bname+'.eps')
plt.savefig(bname+'.pdf')
plt.savefig(bname+'.png')
plt.savefig(bname+'.svg')
# try:
# import pyemf
# plt.savefig('shares-over-time.emf')
# except :
# print '# no emf support'
# plt.show()
plt.close()
# ## next plot:
for lane in range(maxLanes):
desc = 'lane: ' + repr(lane)
plt.plot(QVec, xVec[range(n),lane], 'o', markersize=10, label=desc)
# plt.plot(tVec, qVec[range(n),0], 'r-',tVec, qVec[range(n),1], 'g-',tVec, qVec[range(n),2], 'b-')
# plt.plot(tVec, QVec, 'r-')
plt.ylabel('lane shares')
plt.xlabel('total flow [veh/h]')
plt.legend()
bname = 'shares-vs-flow-' + repr(maxLanes)
plt.savefig(bname+'.eps')
plt.savefig(bname+'.pdf')
plt.savefig(bname+'.png')
plt.savefig(bname+'.svg')
# plt.show()
plt.close()
except ImportError:
print 'no matplotlib, falling back to gnuplot'
os.system('gnuplot do-some-plots.gnu')
|