Some adjustements for lineplot
This commit is contained in:
parent
c370d9d250
commit
c90f7aabfc
|
@ -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)
|
||||||
|
|
Reference in New Issue