Projects/laydi
Projects
/
laydi
Archived
7
0
Fork 0

Updated plots to demonstrate current selection update

This commit is contained in:
Arnar Flatberg 2006-04-19 18:25:44 +00:00
parent 1091bea0e9
commit 56dac31529
4 changed files with 51 additions and 24 deletions

4
fluent
View File

@ -88,6 +88,10 @@ class FluentApp:
plot2 = plots.ScatterPlot() plot2 = plots.ScatterPlot()
plot2.show() plot2.show()
plot3 = plots.ScatterPlot()
plot3.show()
# pt.set_child(plot, 0, 1) # pt.set_child(plot, 0, 1)
# Set up plot toolbar # Set up plot toolbar
dock = self.widget_tree.get_widget('plot_toolbar_dock') dock = self.widget_tree.get_widget('plot_toolbar_dock')

View File

@ -16,6 +16,12 @@ class NavigatorStore (gtk.TreeStore):
self.set_value(iter, 0, ('Scatter Plot')) self.set_value(iter, 0, ('Scatter Plot'))
self.set_value(iter, 1, (plots.ScatterPlot())) self.set_value(iter, 1, (plots.ScatterPlot()))
iter = self.append(None)
self.set_value(iter, 0, ('Scatter Plot 2'))
self.set_value(iter, 1, (plots.ScatterPlot()))
def plot_at(self, path): def plot_at(self, path):
iter = self.get_iter(path) iter = self.get_iter(path)
plot = self.get_value(iter, 1) plot = self.get_value(iter, 1)

View File

@ -1,19 +1,17 @@
import logger
import pygtk import pygtk
import gtk import gtk
import matplotlib import matplotlib
import scipy
import project import project
from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas
from matplotlib.axes import Subplot from matplotlib.axes import Subplot
from matplotlib.figure import Figure from matplotlib.figure import Figure
from matplotlib.numerix import arange, sin, pi from matplotlib.numerix import arange, sin, pi
from matplotlib.backends.backend_gtk import NavigationToolbar2GTK as NavigationToolbar from matplotlib.backends.backend_gtk import NavigationToolbar2GTK as NavigationToolbar
from matplotlib.widgets import RectangleSelector from matplotlib.widgets import RectangleSelector
import scipy
import logger
import project
class MainView (gtk.Notebook): class MainView (gtk.Notebook):
def __init__(self): def __init__(self):
@ -186,7 +184,7 @@ class Plot (gtk.Frame):
self.set_shadow_type(gtk.SHADOW_OUT) self.set_shadow_type(gtk.SHADOW_OUT)
def update_selection(self,project): def update_selection(self,project):
self.selection_object = project.get_selection() pass
class EmptyView (Plot): class EmptyView (Plot):
def __init__(self): def __init__(self):
@ -235,21 +233,27 @@ class ScatterPlot (Plot):
Plot.__init__(self) Plot.__init__(self)
fig = Figure(figsize=(5,4), dpi=72) fig = Figure(figsize=(5,4), dpi=72)
self.ax = ax = fig.add_subplot(111) self.ax = ax = fig.add_subplot(111)
self.x_dataset = project.c_p.datasets[0]
# testing testing
self.c_p = project.c_p
self.x_dataset = self.c_p.datasets[0]
x = self.x_dataset._data x = self.x_dataset._data
self.xaxis_data = xaxis_data = x[:,0] self.xaxis_data = xaxis_data = x[:,0] + scipy.randn(scipy.shape(x)[0])
self.yaxis_data = yaxis_data = x[:,1] self.yaxis_data = yaxis_data = x[:,1]
self.current_dim = self.x_dataset._dim_names[0]
ax.plot(xaxis_data,yaxis_data,'og') ax.plot(xaxis_data,yaxis_data,'og')
###
self.canvas = FigureCanvas(fig) self.canvas = FigureCanvas(fig)
self.add(self.canvas) self.add(self.canvas)
rectprops = dict(facecolor='blue', edgecolor = 'black', rectprops = dict(facecolor='gray', edgecolor = 'black',
alpha=0.2, fill=True) alpha=0.2, fill=True) #cool
sel = RectangleSelector(ax, self.line_select_callback, sel = RectangleSelector(ax, self.rectangle_select_callback,
drawtype='box',useblit=True,rectprops=rectprops) drawtype='box',useblit=True,rectprops=rectprops)
self.canvas.show() self.canvas.show()
def line_select_callback(self,event1, event2): def rectangle_select_callback(self,event1, event2):
'event1 and event2 are the press and release events' 'event1 and event2 are the press and release events'
x1, y1 = event1.xdata, event1.ydata x1, y1 = event1.xdata, event1.ydata
x2, y2 = event2.xdata, event2.ydata x2, y2 = event2.xdata, event2.ydata
@ -259,27 +263,40 @@ class ScatterPlot (Plot):
ydata = self.yaxis_data ydata = self.yaxis_data
xdata = self.xaxis_data xdata = self.xaxis_data
if x1>x2: if x1>x2:
logger.log('debug','Selection x_start bigger than x_end')
if y1<y2: if y1<y2:
logger.log('debug','Selection y_start less than y_end')
index =scipy.nonzero((xdata<x1) & (xdata>x2) & (ydata>y1) & (ydata<y2)) index =scipy.nonzero((xdata<x1) & (xdata>x2) & (ydata>y1) & (ydata<y2))
else: else:
logger.log('debug','Selection y_start larger than y_end')
index =scipy.nonzero((xdata<x1) & (xdata>x2) & (ydata<y1) & (ydata>y2)) index =scipy.nonzero((xdata<x1) & (xdata>x2) & (ydata<y1) & (ydata>y2))
else: else:
logger.log('debug','Selection x_start less than x_end')
if y1<y2: if y1<y2:
index =scipy.nonzero((xdata>x2) & (xdata<x1) & (ydata>y1) & (ydata<y2)) logger.log('debug','Selection y_start less than y_end')
index =scipy.nonzero((xdata>x1) & (xdata<x2) & (ydata>y1) & (ydata<y2))
else: else:
index =scipy.nonzero((xdata>x2) & (xdata<x1) & (ydata<y1) & (ydata>y2)) logger.log('debug','Selection y_start bigger than y_end')
index =scipy.nonzero((xdata>x1) & (xdata<x2) & (ydata<y1) & (ydata>y2))
if len(index)==0: if len(index)==0:
logger.log('debug','No points selected!') logger.log('debug','No points selected!')
else: else:
logger.log('debug','Selected:\n%s'%index) logger.log('debug','Selected:\n%s'%index)
ids = self.x_dataset.extract_id_from_index('samples',index) ids = self.x_dataset.extract_id_from_index('samples',index)
#update selection object
self.c_p.set_selection(self.c_p.sel_obj,self.current_dim,ids)
logger.log('debug','Selected identifiers:\n%s'%ids) logger.log('debug','Selected identifiers:\n%s'%ids)
xdata_new = scipy.take(xdata,index)
ydata_new = scipy.take(ydata,index) def update_selection(self,project):
# self.ax.plot(xdata,ydata,'og') curr_sel = project.get_selection(self.c_p.sel_obj)
self.ax.plot(xdata_new,ydata_new,'or') ids = curr_sel[self.current_dim]
self.canvas.draw() index = self.x_dataset.extract_index_from_id(self.current_dim,ids)
xdata_new = scipy.take(self.xaxis_data,index)
ydata_new = scipy.take(self.yaxis_data,index)
self.ax.plot(xdata_new,ydata_new,'or')
self.canvas.draw()
def get_toolbar(self, window): def get_toolbar(self, window):
self.toolbar = NavigationToolbar(self.canvas, window) self.toolbar = NavigationToolbar(self.canvas, window)

View File

@ -24,9 +24,9 @@ class Project:
def notify(self, modifier=None): def notify(self, modifier=None):
"""Notifies observers that selection is updated""" """Notifies observers that selection is updated"""
for observer in self.selection_observers: for observer in self._selection_observers:
if modifier != observer: if modifier != observer:
observer.update(self) observer.update_selection(self)
def set_selection(self,sel_obj,dim_name,selection): def set_selection(self,sel_obj,dim_name,selection):
"""Sets selection and notifies observers""" """Sets selection and notifies observers"""
@ -48,7 +48,7 @@ class Project:
def suggest_dim_name(self,dim_name): def suggest_dim_name(self,dim_name):
"""Creates an arbitrary unique name for a new dimension.""" """Creates an arbitrary unique name for a new dimension."""
if dim_name in self.dim_names: while dim_name in self.dim_names:
dim_name = dim_name + "_t" dim_name = dim_name + "_t"
return dim_name return dim_name
@ -61,8 +61,8 @@ def_list = [ ['samples',[]], ['genes',['a','b','c']] ]
test_data = dataset.Dataset(x,def_list) test_data = dataset.Dataset(x,def_list)
c_p.add_dataset(test_data) c_p.add_dataset(test_data)
y = scipy.rand(2,2) y = scipy.rand(2000,2)
def_list = [ ['samples',['1','2']], ['yclasses',['C','N']] ] def_list = [ ['samples',[]], ['yclasses',['C','N']] ]
test_data = dataset.Dataset(y,def_list) test_data = dataset.Dataset(y,def_list)
c_p.add_dataset(test_data) c_p.add_dataset(test_data)