Coverage for C:\Git\TUDelft-CITG\Hydraulic-Infrastructure-Realisation\digital_twin\plot.py : 38%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# plotting libraries
# spatial libraries
"""create a plot of the planning of vessels"""
def get_segments(series, activity, y_val): """extract 'start' and 'stop' of activities from log""" x = [] y = [] for i, v in series.iteritems(): if v == activity + ' start': start = i if v == activity + ' stop': x.extend((start, start, i, i, i)) y.extend((y_val, y_val, y_val, y_val, None)) return x, y
# organise logdata into 'dataframes' dataframes = [] for vessel in vessels: df = pd.DataFrame( {'log_value': vessel.log["Value"], 'log_string': vessel.log["Message"]}, vessel.log["Timestamp"]) dataframes.append(df) df = dataframes[0]
# prepare traces for each of the activities traces = [] for i, activity in enumerate(activities): x_combined = [] y_combined = [] for k, df in enumerate(dataframes): y_val = vessels[k].name x, y = get_segments( df['log_string'], activity=activity, y_val=y_val) x_combined.extend(x) y_combined.extend(y) traces.append(go.Scatter( name=activity, x=x_combined, y=y_combined, mode='lines', hoverinfo='y+name', line=dict(color=colors[i], width=10), connectgaps=False))
# prepare layout of figure layout = go.Layout( title='Vessel planning', hovermode='closest', legend=dict(x=0, y=-.2, orientation="h"), xaxis=dict( title='Time', titlefont=dict( family='Courier New, monospace', size=18, color='#7f7f7f'), range=[0, vessel.log["Timestamp"][-1]]), yaxis=dict( title='Vessels', titlefont=dict( family='Courier New, monospace', size=18, color='#7f7f7f')))
# plot figure init_notebook_mode(connected=True) fig = go.Figure(data=traces, layout=layout) return iplot(fig, filename='news-source')
fname='vessel_movements.kml', icon='http://maps.google.com/mapfiles/kml/shapes/donut.png', size=1, scale=1, stepsize=120): """Create a kml visualisation of vessels. Env variable needs to contain epoch to enable conversion of simulation time to real time. Vessels need logs that contain geometries in lat, lon as a function of time."""
# create a kml file containing the visualisation kml = Kml() fol = kml.newfolder(name="Vessels")
shared_style = Style() shared_style.labelstyle.color = 'ffffffff' # White shared_style.labelstyle.scale = size shared_style.iconstyle.color = 'ffff0000' # Blue shared_style.iconstyle.scale = scale shared_style.iconstyle.icon.href = icon
# each timestep will be represented as a single point for vessel in vessels: geom_x = [] geom_y = []
for geom in vessel.log["Geometry"]: geom_x.append(geom.x) geom_y.append(geom.y)
vessel.log["Geometry - x"] = geom_x vessel.log["Geometry - y"] = geom_y
time_stamp_min = min(vessel.log["Timestamp"]).timestamp() time_stamp_max = max(vessel.log["Timestamp"]).timestamp()
steps = int(np.floor((time_stamp_max - time_stamp_min) / stepsize)) timestamps_t = np.linspace(time_stamp_min, time_stamp_max, steps)
times = [] for t in vessel.log["Timestamp"]: times.append(t.timestamp())
vessel.log["timestamps_t"] = timestamps_t vessel.log["timestamps_x"] = np.interp(timestamps_t, times, vessel.log["Geometry - x"]) vessel.log["timestamps_y"] = np.interp(timestamps_t, times, vessel.log["Geometry - y"])
for log_index, value in enumerate(vessel.log["timestamps_t"][:-1]):
begin = datetime.datetime.fromtimestamp(vessel.log["timestamps_t"][log_index]) end = datetime.datetime.fromtimestamp(vessel.log["timestamps_t"][log_index + 1])
pnt = fol.newpoint(name=vessel.name, coords=[(vessel.log["timestamps_x"][log_index], vessel.log["timestamps_y"][log_index])]) pnt.timespan.begin = begin.isoformat() pnt.timespan.end = end.isoformat() pnt.style = shared_style
# include last point as well begin = datetime.datetime.fromtimestamp(vessel.log["timestamps_t"][log_index + 1]) end = datetime.datetime.fromtimestamp(vessel.log["timestamps_t"][log_index + 1])
pnt = fol.newpoint(name=vessel.name, coords=[(vessel.log["timestamps_x"][log_index + 1], vessel.log["timestamps_y"][log_index + 1])]) pnt.timespan.begin = begin.isoformat() pnt.timespan.end = end.isoformat() pnt.style = shared_style
kml.save(fname)
fname='graph.kml', icon='http://maps.google.com/mapfiles/kml/shapes/donut.png', size=0.5, scale=0.5, width=5): """Create a kml visualisation of graph. Env variable needs to contain graph."""
# create a kml file containing the visualisation kml = Kml() fol = kml.newfolder(name="Vessels")
shared_style = Style() shared_style.labelstyle.color = 'ffffffff' # White shared_style.labelstyle.scale = size shared_style.iconstyle.color = 'ffffffff' # White shared_style.iconstyle.scale = scale shared_style.iconstyle.icon.href = icon shared_style.linestyle.color = 'ff0055ff' # Red shared_style.linestyle.width = width
nodes = list(env.FG.nodes)
# each timestep will be represented as a single point for log_index, value in enumerate(list(env.FG.nodes)[0:-1-1]):
pnt = fol.newpoint(name='', coords=[(nx.get_node_attributes(env.FG, "Geometry")[nodes[log_index]].x, nx.get_node_attributes(env.FG, "Geometry")[nodes[log_index]].y)]) pnt.style = shared_style
edges = list(env.FG.edges) for log_index, value in enumerate(list(env.FG.edges)[0:-1-1]):
lne = fol.newlinestring(name='', coords = [(nx.get_node_attributes(env.FG, "Geometry")[edges[log_index][0]].x, nx.get_node_attributes(env.FG, "Geometry")[edges[log_index][0]].y), (nx.get_node_attributes(env.FG, "Geometry")[edges[log_index][1]].x, nx.get_node_attributes(env.FG, "Geometry")[edges[log_index][1]].y)]) lne.style = shared_style
kml.save(fname)
# For the total plot
# For the barchart energy_use_unloading, energy_use_sailing_full, energy_use_sailing_empty, energy_use_waiting] "Unloading", "Sailing full", "Sailing empty", "Waiting"] (98/255, 192/255, 122/255), (255/255,150/255,0/255), (98/255, 141/255, 122/255), (124/255, 10/255, 2/255)]
# For the cumulative percentages energy_use_unloading, energy_use_sailing_full, energy_use_sailing_empty, energy_use_waiting])
energy_use_unloading, energy_use_sailing_full, energy_use_sailing_empty, energy_use_waiting] energy_use_unloading / total_use, energy_use_sailing_full / total_use, energy_use_sailing_empty / total_use, energy_use_waiting / total_use,]
(x_txt, y_txt), size = 12)
# Further markup
plt.show() |