Source code for itstools.connectv2x.plottools

from bokeh.plotting import figure, show
from bokeh.layouts import row
from bokeh.io import output_notebook
from bokeh.palettes import Viridis256
from bokeh.transform import linear_cmap
from bokeh.models import ColumnDataSource, ColorBar, Span
import numpy as np

from .carfollow import U_I


[docs]def plot_single_trajectory(p, x, y, c, mapper, size=2): """ Daraws a single trajectory""" source = ColumnDataSource(dict(x=x, y=y, color=c)) p.circle( x="x", y="y", line_color=mapper, color=mapper, fill_alpha=1, size=size, source=source, ) p.line(x, y, color="gainsboro") return p
[docs]def get_mapper(data_mapper): """ Color mapper""" color_min, color_max = np.min(data_mapper), np.max(data_mapper) revViridis256 = list(reversed(Viridis256)) mapper = linear_cmap( field_name="color", palette=revViridis256, low=color_min, high=color_max ) return mapper
[docs]def post_decoration(p, mapper, xlabel, ylabel): """ add colorbar + labels """ color_bar = ColorBar( color_mapper=mapper["transform"], width=8, location=(0, 0) ) p.add_layout(color_bar, "right") p.xaxis.axis_label = xlabel p.yaxis.axis_label = ylabel return p
[docs]def plot_multiple_trajectories( data_x, data_y, data_color, title=None, xlabel=None, ylabel=None, x_range=(0, 800), y_range=(0, 20000), ): """ Draw multiple trajectories""" p = figure( title=title, plot_height=500, plot_width=500, x_range=x_range, y_range=y_range, ) mapper = get_mapper(data_color) for _, data in enumerate(zip(data_y.T, data_color.T)): y, c = data p = plot_single_trajectory(p, data_x, y, c, mapper) p = post_decoration(p, mapper, xlabel, ylabel) return p
[docs]def plot_single_trace( data_x, data_y, title=None, xlabel=None, ylabel=None, p_height=500, p_width=500, ): """ Plots a single trace """ p = figure(title=title, plot_height=p_height, plot_width=p_width) p.yaxis.axis_label_text_font_size = "14pt" p.yaxis.major_label_text_font_size = "14pt" p.xaxis.axis_label_text_font_size = "14pt" p.xaxis.major_label_text_font_size = "14pt" mapper = get_mapper(data_y) p = plot_single_trajectory(p, data_x, data_y, data_y, mapper, 4) p = post_decoration(p, mapper, xlabel, ylabel) return p
[docs]def plot_xva(time, x, v, a, y_range, titles): """ Plots all trajectories pos, speed acceleration""" pos_zoom, spd_zoom, acc_zoom = y_range pos_tit, spd_tit, acc_tit = titles pos = plot_multiple_trajectories( time, x, v, pos_tit, "Time [secs]", "Position [m]", y_range=pos_zoom ) spd = plot_multiple_trajectories( time, v, v, spd_tit, "Time [secs]", "Speed [m/s]", y_range=spd_zoom ) acc = plot_multiple_trajectories( time, a, a, acc_tit, "Time [secs]", "Acceleration [m/s²]", y_range=acc_zoom, ) return (pos, spd, acc)
[docs]def plot_histogram(data_x, var_name=None): """ Plots histogram of data""" hist, edges = np.histogram(data_x, density=True) p = figure( title="Histogram", plot_height=500, plot_width=500, background_fill_color="#fafafa", ) p.quad( top=hist, bottom=0, left=edges[:-1], right=edges[1:], fill_color="navy", line_color="white", alpha=0.5, ) p.yaxis.axis_label_text_font_size = "13pt" p.yaxis.major_label_text_font_size = "13pt" p.xaxis.axis_label_text_font_size = "13pt" p.xaxis.major_label_text_font_size = "13pt" mean = Span( location=np.mean(data_x), dimension="height", line_color="red", line_width=1, ) p.add_layout(mean) p.xaxis.axis_label = var_name p.yaxis.axis_label = "Density" p.grid.grid_line_color = "white" return p
[docs]def plot_stairs(data_x, data_y, title=None, xlabel=None, ylabel=None): """ Plot stairs plot""" p = figure(title=title, plot_height=500, plot_width=500) p.step(data_x, data_y, line_width=2, mode="before") p.xaxis.axis_label = xlabel p.yaxis.axis_label = ylabel return p