Clean up
This commit is contained in:
parent
f73a6db0ee
commit
4de65f1085
296
fluents/plots.py
296
fluents/plots.py
|
@ -450,15 +450,22 @@ class Plot (View):
|
||||||
View.__init__(self, title)
|
View.__init__(self, title)
|
||||||
logger.log('debug', 'plot %s init' %title)
|
logger.log('debug', 'plot %s init' %title)
|
||||||
self.selection_listener = None
|
self.selection_listener = None
|
||||||
self.fig = Figure()
|
|
||||||
self.canvas = FigureCanvasGTKAgg(self.fig)
|
|
||||||
self._toolbar = PlotToolbar(self)
|
|
||||||
self.canvas.add_events(gtk.gdk.ENTER_NOTIFY_MASK)
|
|
||||||
self.current_dim = None
|
self.current_dim = None
|
||||||
self._current_selection = None
|
self._current_selection = None
|
||||||
self._background = None
|
|
||||||
self._frozen = False
|
self._frozen = False
|
||||||
self.use_blit = False
|
self._init_mpl()
|
||||||
|
|
||||||
|
def _init_mpl(self):
|
||||||
|
# init matplotlib related stuff
|
||||||
|
self._background = None
|
||||||
|
self._use_blit = False
|
||||||
|
self.fig = Figure()
|
||||||
|
self.canvas = FigureCanvasGTKAgg(self.fig)
|
||||||
|
self.axes = self.fig.gca()
|
||||||
|
self._toolbar = PlotToolbar(self)
|
||||||
|
self.canvas.add_events(gtk.gdk.ENTER_NOTIFY_MASK)
|
||||||
|
self.add(self.canvas)
|
||||||
|
self.canvas.show()
|
||||||
|
|
||||||
def set_frozen(self, frozen):
|
def set_frozen(self, frozen):
|
||||||
"""A frozen plot will not be updated when the current
|
"""A frozen plot will not be updated when the current
|
||||||
|
@ -550,26 +557,22 @@ class LineViewPlot(Plot):
|
||||||
-- major_axis : dim_number for line dim (see scipy.ndarray for axis def.)
|
-- major_axis : dim_number for line dim (see scipy.ndarray for axis def.)
|
||||||
-- minor_axis : needs definition only for higher order arrays
|
-- minor_axis : needs definition only for higher order arrays
|
||||||
|
|
||||||
fixme: slow (cant get linecollection and blit to work)
|
fixme: slow
|
||||||
"""
|
"""
|
||||||
def __init__(self, dataset, major_axis=1, minor_axis=None, name="Line view"):
|
def __init__(self, dataset, major_axis=1, minor_axis=None, name="Line view"):
|
||||||
|
Plot.__init__(self, name)
|
||||||
self.dataset = dataset
|
self.dataset = dataset
|
||||||
self._data = dataset.asarray()
|
self._data = dataset.asarray()
|
||||||
if len(self._data.shape)==2 and not minor_axis:
|
if len(self._data.shape)==2 and not minor_axis:
|
||||||
minor_axis = major_axis - 1
|
minor_axis = major_axis - 1
|
||||||
self.major_axis = major_axis
|
self.major_axis = major_axis
|
||||||
self.minor_axis = minor_axis
|
self.minor_axis = minor_axis
|
||||||
Plot.__init__(self, name)
|
|
||||||
self.use_blit = False #fixme: blitting should work
|
|
||||||
self.current_dim = self.dataset.get_dim_name(major_axis)
|
self.current_dim = self.dataset.get_dim_name(major_axis)
|
||||||
self.line_coll = None
|
|
||||||
|
|
||||||
# make axes
|
|
||||||
self.axes = self.fig.add_subplot(111)
|
|
||||||
|
|
||||||
#initial draw
|
#initial draw
|
||||||
x_axis = scipy.arange(self._data.shape[minor_axis])
|
self.line_coll = None
|
||||||
self.line_segs = []
|
self.line_segs = []
|
||||||
|
x_axis = scipy.arange(self._data.shape[minor_axis])
|
||||||
for xi in range(self._data.shape[major_axis]):
|
for xi in range(self._data.shape[major_axis]):
|
||||||
yi = self._data.take([xi], major_axis).ravel()
|
yi = self._data.take([xi], major_axis).ravel()
|
||||||
self.line_segs.append([(xx,yy) for xx,yy in izip(x_axis, yi)])
|
self.line_segs.append([(xx,yy) for xx,yy in izip(x_axis, yi)])
|
||||||
|
@ -577,18 +580,10 @@ class LineViewPlot(Plot):
|
||||||
# draw background
|
# draw background
|
||||||
self._set_background(self.axes)
|
self._set_background(self.axes)
|
||||||
|
|
||||||
# add canvas
|
|
||||||
self.add(self.canvas)
|
|
||||||
self.canvas.show()
|
|
||||||
|
|
||||||
# add toolbar
|
|
||||||
|
|
||||||
self._toolbar = PlotToolbar(self)
|
|
||||||
# Disable selection modes
|
# Disable selection modes
|
||||||
self._toolbar.freeze_button.set_sensitive(False)
|
self._toolbar.freeze_button.set_sensitive(False)
|
||||||
self._toolbar.set_mode_sensitive('select', False)
|
self._toolbar.set_mode_sensitive('select', False)
|
||||||
self._toolbar.set_mode_sensitive('lassoselect', False)
|
self._toolbar.set_mode_sensitive('lassoselect', False)
|
||||||
#self.canvas.mpl_connect('resize_event', self.clear_background)
|
|
||||||
|
|
||||||
def _set_background(self, ax):
|
def _set_background(self, ax):
|
||||||
"""Add three patches representing [min max],[5,95] and [25,75] percentiles, and a line at the median.
|
"""Add three patches representing [min max],[5,95] and [25,75] percentiles, and a line at the median.
|
||||||
|
@ -652,7 +647,7 @@ class LineViewPlot(Plot):
|
||||||
self.axes.add_collection(self.line_coll)
|
self.axes.add_collection(self.line_coll)
|
||||||
|
|
||||||
#draw
|
#draw
|
||||||
if self.use_blit:
|
if self._use_blit:
|
||||||
if self._background is None:
|
if self._background is None:
|
||||||
self._background = self.canvas.copy_from_bbox(self.axes.bbox)
|
self._background = self.canvas.copy_from_bbox(self.axes.bbox)
|
||||||
self.canvas.restore_region(self._background)
|
self.canvas.restore_region(self._background)
|
||||||
|
@ -669,20 +664,19 @@ class ScatterMarkerPlot(Plot):
|
||||||
def __init__(self, dataset_1, dataset_2, id_dim, sel_dim,
|
def __init__(self, dataset_1, dataset_2, id_dim, sel_dim,
|
||||||
id_1, id_2, s=6, name="Scatter plot"):
|
id_1, id_2, s=6, name="Scatter plot"):
|
||||||
Plot.__init__(self, name)
|
Plot.__init__(self, name)
|
||||||
self.axes = self.fig.add_subplot(111)
|
|
||||||
self.axes.axhline(0, color='k', lw=1., zorder=1)
|
|
||||||
self.axes.axvline(0, color='k', lw=1., zorder=1)
|
|
||||||
self.current_dim = id_dim
|
self.current_dim = id_dim
|
||||||
self.dataset_1 = dataset_1
|
self.dataset_1 = dataset_1
|
||||||
self.ms = s
|
self.ms = s
|
||||||
self._selection_line = None
|
|
||||||
x_index = dataset_1[sel_dim][id_1]
|
x_index = dataset_1[sel_dim][id_1]
|
||||||
y_index = dataset_2[sel_dim][id_2]
|
y_index = dataset_2[sel_dim][id_2]
|
||||||
self.xaxis_data = dataset_1._array[:, x_index]
|
self.xaxis_data = dataset_1._array[:, x_index]
|
||||||
self.yaxis_data = dataset_2._array[:, y_index]
|
self.yaxis_data = dataset_2._array[:, y_index]
|
||||||
|
|
||||||
|
# init draw
|
||||||
|
self._selection_line = None
|
||||||
self.line = self.axes.plot(self.xaxis_data, self.yaxis_data, 'o', markeredgewidth=0, markersize=s)
|
self.line = self.axes.plot(self.xaxis_data, self.yaxis_data, 'o', markeredgewidth=0, markersize=s)
|
||||||
self.add(self.canvas)
|
self.axes.axhline(0, color='k', lw=1., zorder=1)
|
||||||
self.canvas.show()
|
self.axes.axvline(0, color='k', lw=1., zorder=1)
|
||||||
|
|
||||||
def rectangle_select_callback(self, x1, y1, x2, y2, key):
|
def rectangle_select_callback(self, x1, y1, x2, y2, key):
|
||||||
ydata = self.yaxis_data
|
ydata = self.yaxis_data
|
||||||
|
@ -726,7 +720,7 @@ class ScatterMarkerPlot(Plot):
|
||||||
markeredgewidth=1.0)
|
markeredgewidth=1.0)
|
||||||
self.axes.add_line(self._selection_line)
|
self.axes.add_line(self._selection_line)
|
||||||
|
|
||||||
if self.use_blit:
|
if self._use_blit:
|
||||||
if self._background is None:
|
if self._background is None:
|
||||||
self._background = self.canvas.copy_from_bbox(self.axes.bbox)
|
self._background = self.canvas.copy_from_bbox(self.axes.bbox)
|
||||||
self.canvas.restore_region(self._background)
|
self.canvas.restore_region(self._background)
|
||||||
|
@ -740,11 +734,11 @@ class ScatterMarkerPlot(Plot):
|
||||||
class ScatterPlot(Plot):
|
class ScatterPlot(Plot):
|
||||||
"""The ScatterPlot is slower than scattermarker, but has size option."""
|
"""The ScatterPlot is slower than scattermarker, but has size option."""
|
||||||
def __init__(self, dataset_1, dataset_2, id_dim, sel_dim, id_1, id_2, c='b', s=30, sel_dim_2=None, name="Scatter plot"):
|
def __init__(self, dataset_1, dataset_2, id_dim, sel_dim, id_1, id_2, c='b', s=30, sel_dim_2=None, name="Scatter plot"):
|
||||||
|
|
||||||
|
Plot.__init__(self, name)
|
||||||
self.dataset_1 = dataset_1
|
self.dataset_1 = dataset_1
|
||||||
self.s = s
|
self.s = s
|
||||||
self.c = c
|
self.c = c
|
||||||
Plot.__init__(self, name)
|
|
||||||
self.use_blit = False
|
|
||||||
self.current_dim = id_dim
|
self.current_dim = id_dim
|
||||||
|
|
||||||
x_index = dataset_1[sel_dim][id_1]
|
x_index = dataset_1[sel_dim][id_1]
|
||||||
|
@ -754,15 +748,11 @@ class ScatterPlot(Plot):
|
||||||
y_index = dataset_2[sel_dim][id_2]
|
y_index = dataset_2[sel_dim][id_2]
|
||||||
self.xaxis_data = dataset_1._array[:, x_index]
|
self.xaxis_data = dataset_1._array[:, x_index]
|
||||||
self.yaxis_data = dataset_2._array[:, y_index]
|
self.yaxis_data = dataset_2._array[:, y_index]
|
||||||
# labels
|
|
||||||
self._text_labels = None
|
|
||||||
|
|
||||||
|
# init draw
|
||||||
self.init_draw()
|
self.init_draw()
|
||||||
|
|
||||||
# add canvas to widget
|
# signals to enable correct use of blit
|
||||||
self.add(self.canvas)
|
|
||||||
self.canvas.show()
|
|
||||||
|
|
||||||
self.connect('zoom-changed', self.onzoom)
|
self.connect('zoom-changed', self.onzoom)
|
||||||
self.connect('pan-changed', self.onpan)
|
self.connect('pan-changed', self.onpan)
|
||||||
self.need_redraw = False
|
self.need_redraw = False
|
||||||
|
@ -781,7 +771,7 @@ class ScatterPlot(Plot):
|
||||||
self.clean_redraw()
|
self.clean_redraw()
|
||||||
|
|
||||||
def clean_redraw(self):
|
def clean_redraw(self):
|
||||||
if self.use_blit == True:
|
if self._use_blit == True:
|
||||||
logger.log('notice', 'blit -> clean redraw ')
|
logger.log('notice', 'blit -> clean redraw ')
|
||||||
self.set_current_selection(None)
|
self.set_current_selection(None)
|
||||||
self._background = self.canvas.copy_from_bbox(self.axes.bbox)
|
self._background = self.canvas.copy_from_bbox(self.axes.bbox)
|
||||||
|
@ -790,7 +780,6 @@ class ScatterPlot(Plot):
|
||||||
self._background = None
|
self._background = None
|
||||||
|
|
||||||
def init_draw(self):
|
def init_draw(self):
|
||||||
self.axes = self.fig.add_subplot(111)
|
|
||||||
lw = scipy.zeros(self.xaxis_data.shape)
|
lw = scipy.zeros(self.xaxis_data.shape)
|
||||||
self.sc = self.axes.scatter(self.xaxis_data, self.yaxis_data,
|
self.sc = self.axes.scatter(self.xaxis_data, self.yaxis_data,
|
||||||
s=self.s, c=self.c, linewidth=lw, zorder=3)
|
s=self.s, c=self.c, linewidth=lw, zorder=3)
|
||||||
|
@ -876,7 +865,7 @@ class ScatterPlot(Plot):
|
||||||
linewidth.put(1, index)
|
linewidth.put(1, index)
|
||||||
self.selection_collection.set_linewidth(linewidth)
|
self.selection_collection.set_linewidth(linewidth)
|
||||||
|
|
||||||
if self.use_blit and len(index)>0 :
|
if self._use_blit and len(index)>0 :
|
||||||
if self._background is None:
|
if self._background is None:
|
||||||
self._background = self.canvas.copy_from_bbox(self.axes.bbox)
|
self._background = self.canvas.copy_from_bbox(self.axes.bbox)
|
||||||
self.canvas.restore_region(self._background)
|
self.canvas.restore_region(self._background)
|
||||||
|
@ -888,31 +877,19 @@ class ScatterPlot(Plot):
|
||||||
|
|
||||||
class ImagePlot(Plot):
|
class ImagePlot(Plot):
|
||||||
def __init__(self, dataset, **kw):
|
def __init__(self, dataset, **kw):
|
||||||
|
Plot.__init__(self, kw.get('name', 'Image Plot'))
|
||||||
self.dataset = dataset
|
self.dataset = dataset
|
||||||
self.keywords = kw
|
|
||||||
|
|
||||||
Plot.__init__(self, kw['name'])
|
|
||||||
|
|
||||||
self.axes = self.fig.add_subplot(111)
|
|
||||||
self.axes.set_xticks([])
|
|
||||||
self.axes.set_yticks([])
|
|
||||||
self.axes.grid(False)
|
|
||||||
|
|
||||||
# Initial draw
|
# Initial draw
|
||||||
self.axes.imshow(dataset.asarray(), interpolation='nearest', aspect='auto')
|
self.axes.grid(False)
|
||||||
|
self.axes.imshow(dataset.asarray(), interpolation='nearest')
|
||||||
# Add canvas and show
|
self.axes.axis('tight')
|
||||||
self.add(self.canvas)
|
|
||||||
self.canvas.show()
|
|
||||||
|
|
||||||
# Disable selection modes
|
# Disable selection modes
|
||||||
self._toolbar.freeze_button.set_sensitive(False)
|
self._toolbar.freeze_button.set_sensitive(False)
|
||||||
self._toolbar.set_mode_sensitive('select', False)
|
self._toolbar.set_mode_sensitive('select', False)
|
||||||
self._toolbar.set_mode_sensitive('lassoselect', False)
|
self._toolbar.set_mode_sensitive('lassoselect', False)
|
||||||
|
|
||||||
def get_toolbar(self):
|
|
||||||
return self._toolbar
|
|
||||||
|
|
||||||
|
|
||||||
class HistogramPlot(Plot):
|
class HistogramPlot(Plot):
|
||||||
""" Histogram plot.
|
""" Histogram plot.
|
||||||
|
@ -924,8 +901,6 @@ class HistogramPlot(Plot):
|
||||||
Plot.__init__(self, kw['name'])
|
Plot.__init__(self, kw['name'])
|
||||||
self.dataset = dataset
|
self.dataset = dataset
|
||||||
self._data = dataset.asarray()
|
self._data = dataset.asarray()
|
||||||
self.axes = self.fig.add_subplot(111)
|
|
||||||
self.axes.grid(False)
|
|
||||||
|
|
||||||
# If dataset is 1-dim we may do selections
|
# If dataset is 1-dim we may do selections
|
||||||
if dataset.shape[0]==1:
|
if dataset.shape[0]==1:
|
||||||
|
@ -933,7 +908,8 @@ class HistogramPlot(Plot):
|
||||||
if dataset.shape[1]==1:
|
if dataset.shape[1]==1:
|
||||||
self.current_dim = dataset.get_dim_name(0)
|
self.current_dim = dataset.get_dim_name(0)
|
||||||
# Initial draw
|
# Initial draw
|
||||||
bins = min(len(self.dataset[self.current_dim]), 20)
|
self.axes.grid(False)
|
||||||
|
bins = min(self._data.size, 20)
|
||||||
count, lims, self.patches = self.axes.hist(self._data, bins=bins)
|
count, lims, self.patches = self.axes.hist(self._data, bins=bins)
|
||||||
|
|
||||||
# Add identifiers to the individual patches
|
# Add identifiers to the individual patches
|
||||||
|
@ -946,9 +922,6 @@ class HistogramPlot(Plot):
|
||||||
bool_ind = scipy.bitwise_and(self._data>=lims[i],
|
bool_ind = scipy.bitwise_and(self._data>=lims[i],
|
||||||
self._data<=end_lim)
|
self._data<=end_lim)
|
||||||
patch.index = scipy.where(bool_ind)[0]
|
patch.index = scipy.where(bool_ind)[0]
|
||||||
# Add canvas and show
|
|
||||||
self.add(self.canvas)
|
|
||||||
self.canvas.show()
|
|
||||||
|
|
||||||
if self.current_dim==None:
|
if self.current_dim==None:
|
||||||
# Disable selection modes
|
# Disable selection modes
|
||||||
|
@ -1010,14 +983,13 @@ class BarPlot(Plot):
|
||||||
Ordinary bar plot for (column) vectors.
|
Ordinary bar plot for (column) vectors.
|
||||||
For matrices there is one color for each row.
|
For matrices there is one color for each row.
|
||||||
"""
|
"""
|
||||||
def __init__(self, dataset, name):
|
def __init__(self, dataset, **kw):
|
||||||
|
Plot.__init__(self, kw.get('name', 'Bar Plot'))
|
||||||
self.dataset = dataset
|
self.dataset = dataset
|
||||||
n, m = dataset.shape
|
|
||||||
Plot.__init__(self, name)
|
|
||||||
self.axes = self.fig.add_subplot(111)
|
|
||||||
self.axes.grid(False)
|
|
||||||
|
|
||||||
# Initial draw
|
# Initial draw
|
||||||
|
self.axes.grid(False)
|
||||||
|
n, m = dataset.shape
|
||||||
if m>1:
|
if m>1:
|
||||||
sm = cm.ScalarMappable()
|
sm = cm.ScalarMappable()
|
||||||
clrs = sm.to_rgba(range(n))
|
clrs = sm.to_rgba(range(n))
|
||||||
|
@ -1032,157 +1004,110 @@ class BarPlot(Plot):
|
||||||
left = scipy.arange(1, n, 1)
|
left = scipy.arange(1, n, 1)
|
||||||
self.axes.bar(left, height)
|
self.axes.bar(left, height)
|
||||||
|
|
||||||
# Add canvas and show
|
|
||||||
self.add(self.canvas)
|
|
||||||
self.canvas.show()
|
|
||||||
|
|
||||||
# Disable selection modes
|
# Disable selection modes
|
||||||
self._toolbar.freeze_button.set_sensitive(False)
|
self._toolbar.freeze_button.set_sensitive(False)
|
||||||
self._toolbar.set_mode_sensitive('select', False)
|
self._toolbar.set_mode_sensitive('select', False)
|
||||||
self._toolbar.set_mode_sensitive('lassoselect', False)
|
self._toolbar.set_mode_sensitive('lassoselect', False)
|
||||||
|
|
||||||
def get_toolbar(self):
|
|
||||||
return self._toolbar
|
|
||||||
|
|
||||||
|
|
||||||
class NetworkPlot(Plot):
|
class NetworkPlot(Plot):
|
||||||
def __init__(self, dataset, **kw):
|
def __init__(self, dataset, pos=None, nodecolor='b', nodesize=40,
|
||||||
# Set member variables and call superclass' constructor
|
prog='neato', with_labels=False, name='Network Plot'):
|
||||||
self.graph = dataset.asnetworkx()
|
|
||||||
|
Plot.__init__(self, name)
|
||||||
self.dataset = dataset
|
self.dataset = dataset
|
||||||
self.keywords = kw
|
self.graph = dataset.asnetworkx()
|
||||||
if not kw.has_key('name'):
|
self._prog = prog
|
||||||
kw['name'] = self.dataset.get_name()
|
self._pos = pos
|
||||||
Plot.__init__(self, kw['name'])
|
self._nodesize = nodesize
|
||||||
|
self._nodecolor = nodecolor
|
||||||
|
self._with_labels = with_labels
|
||||||
|
|
||||||
self.current_dim = self.dataset.get_dim_name(0)
|
self.current_dim = self.dataset.get_dim_name(0)
|
||||||
if not kw.has_key('prog'):
|
|
||||||
kw['prog'] = 'neato'
|
|
||||||
if not kw.has_key('pos'):
|
|
||||||
kw['pos'] = networkx.graphviz_layout(self.graph, 'neato')
|
|
||||||
if not kw.has_key('nodelist'):
|
|
||||||
kw['nodelist'] = self.dataset.get_identifiers(self.current_dim, sorted=True)
|
|
||||||
if not kw.has_key('with_labels'):
|
|
||||||
kw['with_labels'] = True
|
|
||||||
|
|
||||||
# Keep node size and color as dicts for fast lookup
|
if not self._pos:
|
||||||
self.node_size = {}
|
self._pos = networkx.graphviz_layout(self.graph, self._prog)
|
||||||
if kw.has_key('node_size') and cbook.iterable(kw['node_size']):
|
self._xy = scipy.asarray([self._pos[node] for node in self.dataset.get_identifiers(self.current_dim, sorted=True)])
|
||||||
kw.remove('node_size')
|
self.xaxis_data = self._xy[:,0]
|
||||||
for id, size in zip(self.dataset[self.current_dim], kw['node_size']):
|
self.yaxis_data = self._xy[:,1]
|
||||||
self.node_size[id] = size
|
|
||||||
else:
|
|
||||||
for id in dataset[self.current_dim]:
|
|
||||||
self.node_size[id] = 30
|
|
||||||
|
|
||||||
self.node_color = {}
|
# Initial draw
|
||||||
if kw.has_key('node_color') and cbook.iterable(kw['node_color']):
|
self.default_props = {'nodesize': 50, 'nodecolor':'gray'}
|
||||||
kw.remove('node_color')
|
self.node_collection = None
|
||||||
for id, color in zip(self.dataset[self.current_dim], kw['node_color']):
|
self.edge_collection = None
|
||||||
self.node_color[id] = color
|
self.node_labels = None
|
||||||
else:
|
lw = scipy.zeros(self.xaxis_data.shape)
|
||||||
for id in self.dataset[self.current_dim]:
|
self.node_collection = self.axes.scatter(self.xaxis_data, self.yaxis_data,
|
||||||
self.node_color[id] = 1.0
|
s=self._nodesize,
|
||||||
|
c=self._nodecolor,
|
||||||
|
linewidth=lw,
|
||||||
|
zorder=3)
|
||||||
|
# selected nodes is a transparent graph that adjust edge-visibility
|
||||||
|
# according to the current selection
|
||||||
|
self.selected_nodes = self.axes.scatter(self.xaxis_data,
|
||||||
|
self.yaxis_data,
|
||||||
|
s=self._nodesize,
|
||||||
|
c=self._nodecolor,
|
||||||
|
linewidth=lw,
|
||||||
|
zorder=4,
|
||||||
|
alpha=0)
|
||||||
|
|
||||||
self.axes = self.fig.add_subplot(111)
|
self.edge_collection = networkx.draw_networkx_edges(self.graph,
|
||||||
|
self._pos,
|
||||||
|
ax=self.axes,
|
||||||
|
edge_color='gray')
|
||||||
|
if self._with_labels:
|
||||||
|
self.node_labels = networkx.draw_networkx_labels(self.graph,
|
||||||
|
self._pos,
|
||||||
|
ax=self.axes)
|
||||||
|
|
||||||
|
# remove axes, frame and grid
|
||||||
self.axes.set_xticks([])
|
self.axes.set_xticks([])
|
||||||
self.axes.set_yticks([])
|
self.axes.set_yticks([])
|
||||||
self.axes.grid(False)
|
self.axes.grid(False)
|
||||||
self.axes.set_frame_on(False)
|
self.axes.set_frame_on(False)
|
||||||
|
|
||||||
# Add canvas and show
|
|
||||||
self.add(self.canvas)
|
|
||||||
self.canvas.show()
|
|
||||||
|
|
||||||
# Initial draw
|
|
||||||
networkx.draw_networkx(self.graph, ax=self.axes, node_size=30, node_color='gray', **kw)
|
|
||||||
del kw['nodelist']
|
|
||||||
|
|
||||||
def get_toolbar(self):
|
|
||||||
return self._toolbar
|
|
||||||
|
|
||||||
def rectangle_select_callback(self, x1, y1, x2, y2, key):
|
def rectangle_select_callback(self, x1, y1, x2, y2, key):
|
||||||
pos = self.keywords['pos']
|
ydata = self.yaxis_data
|
||||||
ydata = scipy.zeros((len(pos),), 'l')
|
xdata = self.xaxis_data
|
||||||
xdata = scipy.zeros((len(pos),), 'l')
|
|
||||||
node_ids = []
|
|
||||||
c = 0
|
|
||||||
for name,(x,y) in pos.items():
|
|
||||||
node_ids.append(name)
|
|
||||||
xdata[c] = x
|
|
||||||
ydata[c] = y
|
|
||||||
c+=1
|
|
||||||
|
|
||||||
# find indices of selected area
|
# find indices of selected area
|
||||||
if x1 > x2:
|
if x1>x2:
|
||||||
x1, x2 = x2, x1
|
x1, x2 = x2, x1
|
||||||
if y1 > y2:
|
if y1>y2:
|
||||||
y1, y2 = y2, y1
|
y1, y2 = y2, y1
|
||||||
|
assert x1<=x2
|
||||||
|
assert y1<=y2
|
||||||
|
|
||||||
index = scipy.nonzero((xdata>x1) & (xdata<x2) & (ydata>y1) & (ydata<y2))[0]
|
index = scipy.nonzero((xdata>x1) & (xdata<x2) & (ydata>y1) & (ydata<y2))[0]
|
||||||
ids = [node_ids[i] for i in index]
|
ids = self.dataset.get_identifiers(self.current_dim, index)
|
||||||
ids = self.update_selection(ids, key)
|
ids = self.update_selection(ids, key)
|
||||||
self.selection_listener(self.current_dim, ids)
|
self.selection_listener(self.current_dim, ids)
|
||||||
|
|
||||||
def lasso_select_callback(self, verts, key=None):
|
def lasso_select_callback(self, verts, key=None):
|
||||||
pos = self.keywords['pos']
|
xys = scipy.c_[self.xaxis_data[:,scipy.newaxis], self.yaxis_data[:,scipy.newaxis]]
|
||||||
xys = []
|
|
||||||
node_ids = []
|
|
||||||
c = 0
|
|
||||||
for name,(x,y) in pos.items():
|
|
||||||
node_ids.append(name)
|
|
||||||
xys.append((x,y))
|
|
||||||
c+=1
|
|
||||||
|
|
||||||
index = scipy.nonzero(points_inside_poly(xys, verts))[0]
|
index = scipy.nonzero(points_inside_poly(xys, verts))[0]
|
||||||
ids = [node_ids[i] for i in index]
|
ids = self.dataset.get_identifiers(self.current_dim, index)
|
||||||
ids = self.update_selection(ids, key)
|
ids = self.update_selection(ids, key)
|
||||||
self.selection_listener(self.current_dim, ids)
|
self.selection_listener(self.current_dim, ids)
|
||||||
|
|
||||||
|
|
||||||
def set_current_selection(self, selection):
|
def set_current_selection(self, selection):
|
||||||
ids = selection[self.current_dim] # current identifiers
|
linewidth = scipy.zeros(self.xaxis_data.shape, 'f')
|
||||||
node_set = set(self.graph.nodes())
|
index = self.get_index_from_selection(self.dataset, selection)
|
||||||
|
if len(index) > 0:
|
||||||
selected_nodes = list(ids.intersection(node_set))
|
linewidth.put(2, index)
|
||||||
unselected_nodes = list(node_set.difference(ids))
|
nodelist = selection[self.current_dim]
|
||||||
|
selected_edges = self.grap
|
||||||
if self.node_color:
|
self.selected_nodes.set_linewidth(linewidth)
|
||||||
unselected_colors = [self.node_color[x] for x in unselected_nodes]
|
|
||||||
else:
|
|
||||||
unselected_colors = 'gray'
|
|
||||||
|
|
||||||
if self.node_size:
|
|
||||||
unselected_sizes = [self.node_size[x] for x in unselected_nodes]
|
|
||||||
selected_sizes = [self.node_size[x] for x in selected_nodes]
|
|
||||||
else:
|
|
||||||
unselected_sizes = 30
|
|
||||||
selected_sizes = 30
|
|
||||||
|
|
||||||
self.axes.collections = []
|
|
||||||
networkx.draw_networkx_edges(self.graph,
|
|
||||||
edge_list=self.graph.edges(),
|
|
||||||
ax=self.axes,
|
|
||||||
**self.keywords)
|
|
||||||
|
|
||||||
networkx.draw_networkx_labels(self.graph, **self.keywords)
|
|
||||||
|
|
||||||
if unselected_nodes:
|
|
||||||
networkx.draw_networkx_nodes(self.graph, nodelist=unselected_nodes, \
|
|
||||||
node_color='gray', node_size=unselected_sizes, ax=self.axes, **self.keywords)
|
|
||||||
|
|
||||||
if selected_nodes:
|
|
||||||
networkx.draw_networkx_nodes(self.graph, nodelist=selected_nodes, \
|
|
||||||
node_color='r', node_size=selected_sizes, ax=self.axes, **self.keywords)
|
|
||||||
self.axes.collections[-1].set_zorder(3)
|
|
||||||
|
|
||||||
self.canvas.draw()
|
self.canvas.draw()
|
||||||
|
|
||||||
|
|
||||||
class VennPlot(Plot):
|
class VennPlot(Plot):
|
||||||
def __init__(self, name="Venn diagram"):
|
def __init__(self, name="Venn diagram"):
|
||||||
Plot.__init__(self, name)
|
Plot.__init__(self, name)
|
||||||
self.axes = self.fig.add_subplot(111)
|
|
||||||
self.axes.grid(0)
|
|
||||||
self._init_bck()
|
self._init_bck()
|
||||||
|
# init draw
|
||||||
for c in self._venn_patches:
|
for c in self._venn_patches:
|
||||||
self.axes.add_patch(c)
|
self.axes.add_patch(c)
|
||||||
for mrk in self._markers:
|
for mrk in self._markers:
|
||||||
|
@ -1192,14 +1117,10 @@ class VennPlot(Plot):
|
||||||
self._last_active = set()
|
self._last_active = set()
|
||||||
self.axes.set_xticks([])
|
self.axes.set_xticks([])
|
||||||
self.axes.set_yticks([])
|
self.axes.set_yticks([])
|
||||||
self.axes.grid(0)
|
|
||||||
self.axes.axis('equal')
|
self.axes.axis('equal')
|
||||||
|
self.axes.grid(False)
|
||||||
self.axes.set_frame_on(False)
|
self.axes.set_frame_on(False)
|
||||||
|
|
||||||
# add canvas to widget
|
|
||||||
self.add(self.canvas)
|
|
||||||
self.canvas.show()
|
|
||||||
|
|
||||||
def _init_bck(self):
|
def _init_bck(self):
|
||||||
res = 50
|
res = 50
|
||||||
a = .5
|
a = .5
|
||||||
|
@ -1293,11 +1214,6 @@ class VennPlot(Plot):
|
||||||
self.axes.figure.canvas.draw()
|
self.axes.figure.canvas.draw()
|
||||||
|
|
||||||
def rectangle_select_callback(self, x1, y1, x2, y2, key):
|
def rectangle_select_callback(self, x1, y1, x2, y2, key):
|
||||||
"""event1 and event2 are the press and release events"""
|
|
||||||
#x1, y1 = event1.xdata, event1.ydata
|
|
||||||
#x2, y2 = event2.xdata, event2.ydata
|
|
||||||
#key = event1.key
|
|
||||||
|
|
||||||
verts = [(x1, y1), (x2, y2)]
|
verts = [(x1, y1), (x2, y2)]
|
||||||
if key!='shift':
|
if key!='shift':
|
||||||
for m in self._markers:
|
for m in self._markers:
|
||||||
|
|
Reference in New Issue