Source code for pyreal.visualize.time_series_vis
import matplotlib.colors as color
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import LineCollection
from pyreal.visualize.visualize_config import NEGATIVE_COLOR, POSITIVE_COLOR
WIDTH = 5
def plot_time_series_explanation(timeSeriesData, contribution):
index = timeSeriesData.index
assert index.size == 1
columns = timeSeriesData.columns.get_level_values(0).unique()
timestamps = timeSeriesData.columns.get_level_values(1).unique()
fig, axs = plt.subplots(columns.size)
cmap = color.LinearSegmentedColormap.from_list("posnegcmap", [NEGATIVE_COLOR, POSITIVE_COLOR])
for var in columns:
axs.scatter(
timestamps,
timeSeriesData.iloc[0].loc[(var, slice(None))],
c=contribution,
cmap=cmap,
vmin=-1,
vmax=1,
)
plt.show()
[docs]def plot_timeseries_saliency(
data, colors, title=None, fig=None, scale=True, mincol=None, maxcol=None, show=False
):
y = data
x = np.arange(len(y))
# y = preprocessing.scale(y)
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
if mincol is None:
mincol = colors.min()
if maxcol is None:
maxcol = colors.max()
norm = plt.Normalize(mincol, maxcol)
lc = LineCollection(segments, cmap="coolwarm", norm=norm)
lc.set_array(colors)
lc.set_linewidth(WIDTH)
# if(fig is None or ax is None):
# fig, ax = plt.subplots()
if fig is None:
fig = plt.figure()
ax = plt.gca()
line = ax.add_collection(lc)
fig.colorbar(line, ax=ax)
if scale:
ax.set_xlim(x.min(), x.max())
ax.set_ylim(y.min(), y.max())
ax.set_title(title)
if show:
plt.show()
def plot_shapelet(timeSeriesData, shapeletIndices, shapeletLength, show=False):
# only support plotting one instance at a time
index = timeSeriesData.index
assert index.size == 1
columns = timeSeriesData.columns.get_level_values(0).unique()
timestamps = timeSeriesData.columns.get_level_values(1).unique()
fig, axs = plt.subplots(columns.size)
for var in columns:
axs.plot(timestamps, timeSeriesData.iloc[0].loc[(var, slice(None))], color=NEGATIVE_COLOR)
for idx in shapeletIndices:
axs.plot(
np.arange(idx, idx + shapeletLength),
timeSeriesData.iloc[0].loc[(var, slice(idx, idx + shapeletLength - 1))],
color=POSITIVE_COLOR,
)
if show:
plt.show()