def plot_towers(self, iterations, position=(0,0), colors=None): """ Plot the towers of this interval exchange obtained from Rauzy induction. INPUT: - ``nb_iterations`` -- the number of steps of Rauzy induction - ``colors`` -- (optional) colors for the towers EXAMPLES:: sage: from surface_dynamics.all import * sage: p = iet.Permutation('A B', 'B A') sage: T = iet.IntervalExchangeTransformation(p, [0.41510826, 0.58489174]) sage: T.plot_towers(iterations=5) Graphics object consisting of 65 graphics primitives """ px,py = map(float, position) T,_,towers = self.rauzy_move(iterations=iterations,data=True) pi = T.permutation() A = pi.alphabet() lengths = map(float, T.lengths()) if colors is None: from sage.plot.colors import rainbow colors = {a:z for a,z in zip(A, rainbow(len(A)))} from sage.plot.graphics import Graphics from sage.plot.line import line2d from sage.plot.polygon import polygon2d from sage.plot.text import text G = Graphics() x = px for letter in pi[0]: y = x + lengths[A.rank(letter)] tower = towers.image(letter) h = tower.length() G += line2d([(x,py),(x,py+h)], color='black') G += line2d([(y,py),(y,py+h)], color='black') for i,a in enumerate(tower): G += line2d([(x,py+i),(y,py+i)], color='black') G += polygon2d([(x,py+i),(y,py+i),(y,py+i+1),(x,py+i+1)], color=colors[a], alpha=0.4) G += text(a, ((x+y)/2, py+i+.5), color='darkgray') G += line2d([(x,py+h),(y,py+h)], color='black', linestyle='dashed') G += text(letter, ((x+y)/2, py+h+.5), color='black', fontsize='large') x = y x = px G += line2d([(px,py-.5),(px+sum(lengths),py-.5)], color='black') for letter in pi[1]: y = x + lengths[A.rank(letter)] G += line2d([(x,py-.7),(x,py-.3)], color='black') G += text(letter, ((x+y)/2, py-.5), color='black', fontsize='large') x = y G += line2d([(x,py-.7),(x,py-.3)], color='black') return G
def plot_two_intervals(self, position=(0,0), vertical_alignment='center', horizontal_alignment='left', interval_height=0.1, labels_height=0.05, fontsize=14, labels=True, colors=None): r""" Returns a picture of the interval exchange transformation. INPUT: - ``position`` - a 2-uple of the position - ``horizontal_alignment`` - left (default), center or right - ``labels`` - boolean (default: True) - ``fontsize`` - the size of the label OUTPUT: 2d plot -- a plot of the two intervals (domain and range) EXAMPLES:: sage: t = iet.IntervalExchangeTransformation(('a b','b a'),[1,1]) sage: t.plot_two_intervals() Graphics object consisting of 8 graphics primitives """ from sage.plot.all import Graphics from sage.plot.plot import line2d from sage.plot.plot import text from sage.plot.colors import rainbow G = Graphics() lengths = [float(_) for _ in self._lengths] total_length = sum(lengths) if colors is None: colors = rainbow(len(self._permutation), 'rgbtuple') if horizontal_alignment == 'left': s = position[0] elif horizontal_alignment == 'center': s = position[0] - total_length / 2 elif horizontal_alignment == 'right': s = position[0] - total_length else: raise ValueError("horizontal_alignement must be left, center or right") top_height = position[1] + interval_height for i in self._permutation._intervals[0]: G += line2d([(s,top_height), (s+lengths[i],top_height)], rgbcolor=colors[i]) if labels: G += text(str(self._permutation._alphabet.unrank(i)), (s+float(lengths[i])/2, top_height+labels_height), horizontal_alignment='center', rgbcolor=colors[i], fontsize=fontsize) s += lengths[i] if horizontal_alignment == 'left': s = position[0] elif horizontal_alignment == 'center': s = position[0] - total_length / 2 elif horizontal_alignment == 'right': s = position[0] - total_length else: raise ValueError("horizontal_alignement must be left, center or right") bottom_height = position[1] - interval_height for i in self._permutation._intervals[1]: G += line2d([(s,bottom_height), (s+lengths[i],bottom_height)], rgbcolor=colors[i]) if labels: G += text(str(self._permutation._alphabet.unrank(i)), (s+float(lengths[i])/2, bottom_height-labels_height), horizontal_alignment='center', rgbcolor=colors[i], fontsize=fontsize) s += lengths[i] return G
def plot_two_intervals(self, position=(0,0), vertical_alignment='center', horizontal_alignment='left', interval_height=0.1, labels_height=0.05, fontsize=14, labels=True, colors=None): r""" Returns a picture of the interval exchange transformation. INPUT: - ``position`` - a 2-uple of the position - ``horizontal_alignment`` - left (defaut), center or right - ``labels`` - boolean (defaut: True) - ``fontsize`` - the size of the label OUTPUT: 2d plot -- a plot of the two intervals (domain and range) EXAMPLES:: sage: t = iet.IntervalExchangeTransformation(('a b','b a'),[1,1]) sage: t.plot_two_intervals() """ from sage.plot.all import Graphics from sage.plot.plot import line2d from sage.plot.plot import text from sage.plot.colors import rainbow G = Graphics() lengths = map(float,self._lengths) total_length = sum(lengths) if colors is None: colors = rainbow(len(self._permutation), 'rgbtuple') if horizontal_alignment == 'left': s = position[0] elif horizontal_alignment == 'center': s = position[0] - total_length / 2 elif horizontal_alignment == 'right': s = position[0] - total_length else: raise ValueError("horizontal_alignement must be left, center or right") top_height = position[1] + interval_height for i in self._permutation._intervals[0]: G += line2d([(s,top_height), (s+lengths[i],top_height)], rgbcolor=colors[i]) if labels: G += text(str(self._permutation._alphabet.unrank(i)), (s+float(lengths[i])/2, top_height+labels_height), horizontal_alignment='center', rgbcolor=colors[i], fontsize=fontsize) s += lengths[i] if horizontal_alignment == 'left': s = position[0] elif horizontal_alignment == 'center': s = position[0] - total_length / 2 elif horizontal_alignment == 'right': s = position[0] - total_length else: raise ValueError("horizontal_alignement must be left, center or right") bottom_height = position[1] - interval_height for i in self._permutation._intervals[1]: G += line2d([(s,bottom_height), (s+lengths[i],bottom_height)], rgbcolor=colors[i]) if labels: G += text(str(self._permutation._alphabet.unrank(i)), (s+float(lengths[i])/2, bottom_height-labels_height), horizontal_alignment='center', rgbcolor=colors[i], fontsize=fontsize) s += lengths[i] return G
def plot_towers(self, iterations, position=(0, 0), colors=None): """ Plot the towers of this interval exchange obtained from Rauzy induction. INPUT: - ``nb_iterations`` -- the number of steps of Rauzy induction - ``colors`` -- (optional) colors for the towers EXAMPLES:: sage: from surface_dynamics.all import * sage: p = iet.Permutation('A B', 'B A') sage: T = iet.IntervalExchangeTransformation(p, [0.41510826, 0.58489174]) sage: T.plot_towers(iterations=5) # not tested (problem with matplotlib font cache) Graphics object consisting of 65 graphics primitives """ px, py = map(float, position) T, _, towers = self.rauzy_move(iterations=iterations, data=True) pi = T.permutation() A = pi.alphabet() lengths = map(float, T.lengths()) if colors is None: from sage.plot.colors import rainbow colors = {a: z for a, z in zip(A, rainbow(len(A)))} from sage.plot.graphics import Graphics from sage.plot.line import line2d from sage.plot.polygon import polygon2d from sage.plot.text import text G = Graphics() x = px for letter in pi[0]: y = x + lengths[A.rank(letter)] tower = towers.image(letter) h = tower.length() G += line2d([(x, py), (x, py + h)], color='black') G += line2d([(y, py), (y, py + h)], color='black') for i, a in enumerate(tower): G += line2d([(x, py + i), (y, py + i)], color='black') G += polygon2d([(x, py + i), (y, py + i), (y, py + i + 1), (x, py + i + 1)], color=colors[a], alpha=0.4) G += text(a, ((x + y) / 2, py + i + .5), color='darkgray') G += line2d([(x, py + h), (y, py + h)], color='black', linestyle='dashed') G += text(letter, ((x + y) / 2, py + h + .5), color='black', fontsize='large') x = y x = px G += line2d([(px, py - .5), (px + sum(lengths), py - .5)], color='black') for letter in pi[1]: y = x + lengths[A.rank(letter)] G += line2d([(x, py - .7), (x, py - .3)], color='black') G += text(letter, ((x + y) / 2, py - .5), color='black', fontsize='large') x = y G += line2d([(x, py - .7), (x, py - .3)], color='black') return G