Projects/laydi
Projects
/
laydi
Archived
7
0
Fork 0

Some adjustements for lineplot

This commit is contained in:
Arnar Flatberg 2006-09-18 17:23:34 +00:00
parent c370d9d250
commit c90f7aabfc
1 changed files with 60 additions and 35 deletions

View File

@ -8,11 +8,13 @@ from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanva
from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTK as NavigationToolbar2 from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTK as NavigationToolbar2
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 import cm,cbook
from matplotlib.widgets import RectangleSelector from pylab import Polygon
from matplotlib import cm from matplotlib.collections import LineCollection
from matplotlib.mlab import prctile
import networkx import networkx
from system import logger from system import logger
from itertools import izip
class ObjectTable: class ObjectTable:
@ -428,15 +430,39 @@ class LineViewPlot(Plot):
minor_axis = major_axis-1 minor_axis = major_axis-1
#initial draw #initial draw
self.line_collection = {} x_axis = scipy.arange(self._data.shape[minor_axis])
x_axis = scipy.arrayrange(self._data.shape[minor_axis]) self.line_segs=[]
for i in range(self._data.shape[major_axis]): for xi in range(self._data.shape[major_axis]):
yi = self._data.take([i],major_axis) yi = self._data.take([xi],major_axis)
if self.use_blit: self.line_segs.append([(xx,yy) for xx,yy in izip(x_axis,yi)])
l,=self.ax.plot(x_axis,yi,'k',alpha=.05,animated=True)
else: #background
l,=self.ax.plot(x_axis,yi,'k',alpha=.05) xax = scipy.arange(self._data.shape[0])
self.line_collection[i] = l verts_0 = [] #100,0
verts_1 = [] # 90,10
verts_2 = [] # 75,25
med = []
for i in xax:
pp = prctile(self._data[i,:],[0.,5.,25,50.,75.,95.,100])
verts_0.append((i,pp[0]))
verts_1.append((i,pp[1]))
verts_2.append((i,pp[2]))
for i in xax[::-1]:
pp = prctile(self._data[i,:],[0.,5.,25,50.,75.,95.,100])
verts_0.append((i,pp[-1]))
verts_1.append((i,pp[-2]))
verts_2.append((i,pp[-3]))
med.append(pp[3])
bck0 = Polygon(verts_0,alpha=.15,lw=0)
bck1 = Polygon(verts_1,alpha=.15,lw=0)
bck2 = Polygon(verts_2,alpha=.15,lw=0)
self.ax.add_patch(bck0)
self.ax.add_patch(bck1)
self.ax.add_patch(bck2)
self.ax.plot(xax,med,'b')
self.ax.autoscale_view()
self.add(self.canvas) self.add(self.canvas)
self.canvas.show() self.canvas.show()
@ -463,26 +489,17 @@ class LineViewPlot(Plot):
self._background = self.canvas.copy_from_bbox(self.ax.bbox) self._background = self.canvas.copy_from_bbox(self.ax.bbox)
self.canvas.restore_region(self._background) self.canvas.restore_region(self._background)
if index: if len(index)>0: # do we have a selection
if self._last_index: if len(self.ax.collections)>0:
for i in self._last_index: self.ax.collections = []
# if not using blit: reset last selection segs = [self.line_segs[i] for i in index]
self.ax.lines[i].set_color('k') line_coll = LineCollection(segs,colors=(1,0,0,1))
self.ax.lines[i].set_alpha(.05)
self.ax.lines[i].set_zorder(1)
for i in index:
self.ax.lines[i].set_color('r')
self.ax.lines[i].set_alpha(1.0)
self.ax.lines[i].set_visible(True)
self.ax.lines[i].set_zorder(3)
if self.use_blit:
self.ax.draw_artist(self.ax.lines[i])
self._last_index = index
if self.use_blit: if self.use_blit:
self.ax.draw_artist(line_coll)
self.canvas.blit() self.canvas.blit()
else: else:
self.ax.add_collection(line_coll)
#self.ax.autoscale_view()
self.canvas.draw() self.canvas.draw()
class ScatterMarkerPlot(Plot): class ScatterMarkerPlot(Plot):
@ -491,8 +508,8 @@ has no color and size options."""
def __init__(self, dataset_1, dataset_2, id_dim, sel_dim, id_1, id_2,s=6, name="Scatter plot"): def __init__(self, dataset_1, dataset_2, id_dim, sel_dim, id_1, id_2,s=6, name="Scatter plot"):
Plot.__init__(self, name) Plot.__init__(self, name)
self.ax = self.fig.add_subplot(111) self.ax = self.fig.add_subplot(111)
self.ax.axhline(0,color='k',lw=1.5,zorder=0) self.ax.axhline(0,color='k',lw=1.,zorder=1)
self.ax.axvline(0,color='k',lw=1.5,zorder=0) self.ax.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
@ -558,7 +575,11 @@ has no color and size options."""
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]
lw = scipy.zeros(self.xaxis_data.shape) lw = scipy.zeros(self.xaxis_data.shape)
self.ax.scatter(self.xaxis_data,self.yaxis_data,s=s,c=c,linewidth=lw,edgecolor='k',alpha=.6,cmap = cm.Set1) sc = self.ax.scatter(self.xaxis_data,self.yaxis_data,s=s,c=c,linewidth=lw,edgecolor='k',alpha=.6,cmap = cm.jet)
if len(c)>1:
self.fig.colorbar(sc,ticks=[],fraction=.05)
self.ax.axhline(0,color='k',lw=1.,zorder=1)
self.ax.axvline(0,color='k',lw=1.,zorder=1)
self.ax.set_title(self.get_title()) self.ax.set_title(self.get_title())
# collection # collection
self.coll = self.ax.collections[0] self.coll = self.ax.collections[0]
@ -594,9 +615,12 @@ has no color and size options."""
def set_current_selection(self, selection): def set_current_selection(self, selection):
ids = selection[self.current_dim] # current identifiers ids = selection[self.current_dim] # current identifiers
if len(ids)==0:
return
index = self.dataset_1.get_indices(self.current_dim, ids) index = self.dataset_1.get_indices(self.current_dim, ids)
lw = scipy.zeros(self.xaxis_data.shape) lw = scipy.zeros(self.xaxis_data.shape)
scipy.put(lw,index,2.) if len(index)>0:
lw.put(2.,index)
self.coll.set_linewidth(lw) self.coll.set_linewidth(lw)
self._toolbar.forward() #update data lims before draw self._toolbar.forward() #update data lims before draw
self.canvas.draw() self.canvas.draw()
@ -682,7 +706,8 @@ class NetworkPlot(Plot):
x1, x2 = x2, x1 x1, x2 = x2, x1
if y1 > y2: if y1 > y2:
y1, y2 = y2, y1 y1, y2 = y2, y1
index = scipy.nonzero((xdata>x1) & (xdata<x2) & (ydata>y1) & (ydata<y2)) index = scipy.nonzero((xdata>x1) & (xdata<x2) & (ydata>y1) & (ydata<y2))[0]
ids = [node_ids[i] for i in index[0]] ids = [node_ids[i] for i in index[0]]
self.selection_listener(self.dataset.get_dim_name(0), ids) self.selection_listener(self.dataset.get_dim_name(0), ids)