Source code for bluecellulab.plotwindow
# Copyright 2023-2024 Blue Brain Project / EPFL
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Class that represents a plot window in bluecellulab."""
import itertools
[docs]
class PlotWindow:
"""Class the represents a plotting window."""
def __init__(self, var_list, cell, xlim, ylim, title):
import pylab
self.cell = cell
self.var_list = var_list
pylab.ion()
self.figure = pylab.figure(figsize=(10, 10))
# pylab.ioff()
self.ax = self.figure.gca()
self.canvas = self.ax.figure.canvas
self.figure.suptitle(title)
self.ax.set_xlim(xlim)
self.ax.set_ylim(ylim)
self.ax.set_xlabel("ms")
self.ax.set_ylabel("mV")
self.background = self.canvas.copy_from_bbox(self.ax.bbox)
self.line = {}
linenumber = 0
for var_name in self.var_list:
recording = self.cell.get_recording(var_name)
if recording is not None and recording.size > 0:
time = self.cell.get_time()
else:
time = self.cell.get_time()[1:]
# print dir(pylab.gca()._get_lines)
# print pylab.gca()._get_lines.color_cycle
# Sorry, don't see a way but disable this warning to access this
colors = pylab.rcParams['axes.prop_cycle'].by_key()['color']
linecolors = list(itertools.islice(itertools.cycle(colors), 0, 50))
self.line[var_name] = pylab.Line2D(
time, recording, label=var_name,
color=linecolors[linenumber % len(linecolors)])
self.ax.add_line(self.line[var_name])
linenumber += 1
self.ax.legend()
self.figure.canvas.draw()
self.drawCount = 10
[docs]
def redraw(self):
"""Redraw the plot window."""
if not self.drawCount:
time = self.cell.get_time()
for var_name in self.var_list:
voltage = self.cell.get_recording(var_name)
self.line[var_name].set_data(time, voltage)
self.ax.draw_artist(self.line[var_name])
self.canvas.blit(self.ax.bbox)
self.drawCount = 10
else:
self.drawCount = self.drawCount - 1