示例#1
0
文件: plot.py 项目: cpoli/tbee
    def intensity_1d(self, intensity, ms=20., lw=2., fs=20., title=r'$|\psi^{(j)}|^2$'):
        '''
        Plot intensity for 1D lattices.

        :param intensity: np.array. Field intensity.
        :param ms: Positive Float. Default value 20. Markersize.
        :param lw: Positive Float. Default value 2. Linewith, connect sublattice sites.
        :param fs: Positive Float. Default value 20. Font size.
        :param title: String. Default value 'Intensity'. Figure title.
        '''
        error_handling.ndarray(intensity, 'intensity', self.sys.lat.sites)
        error_handling.empty_ndarray(self.sys.lat.coor, 'sys.get_lattice')
        error_handling.positive_real(ms, 'ms')
        error_handling.positive_real(lw, 'lw')
        error_handling.positive_real(fs, 'fs')
        error_handling.string(title, 'title')
        fig, ax = plt.subplots()
        ax.set_xlabel('$j$', fontsize=fs)
        ax.set_ylabel(title, fontsize=fs)
        ax.set_title(title, fontsize=fs)
        for t, c in zip(self.sys.lat.tags, self.colors):
            plt.plot(self.sys.lat.coor['x'][self.sys.lat.coor['tag'] == t],
                        intensity[self.sys.lat.coor['tag'] == t],
                        '-o', color=c, ms=ms, lw=lw)
        plt.xlim([-1., self.sys.lat.sites])
        plt.ylim([0., np.max(intensity)+.05])
        fig.set_tight_layout(True)
        plt.draw()
        return fig
示例#2
0
文件: save.py 项目: cpoli/tbee
    def dir_name(self, dir_name):
        '''
        Set the name of the directory in which the figures are stored.

        :param dir_name: String. Directory name. 
        '''
        error_handling.string(dir_name, 'dir_name')
        dir_name = self.dir_main + dir_name
        return dir_name
示例#3
0
    def dir_name(self, dir_name):
        '''
        Set the name of the directory in which the figures are stored.

        :param dir_name: String. Directory name. 
        '''
        error_handling.string(dir_name, 'dir_name')
        dir_name = self.dir_main + dir_name
        return dir_name
示例#4
0
    def intensity_disk(self,
                       intensity,
                       s=200.,
                       fs=20.,
                       lims=None,
                       figsize=None,
                       title=r'$|\psi|^2$'):
        '''
        Plot the intensity. Colormap with identical disk shape.

        :param intensity: np.array.Field intensity.
        :param s: Default value 200. Disk size.
        :param fs: Default value 20. Font size.
        :param lims: List. Default value None. Colormap limits.
        :param figsize: Tuple. Default value None. Figure size.
        :param title: String. Default value '$|\psi_n|^2$'. Title.

        :returns:
            * **fig** -- Figure.
        '''
        error_handling.empty_ndarray(self.sys.lat.coor, 'sys.get_lattice')
        error_handling.ndarray(intensity, 'intensity', self.sys.lat.sites)
        error_handling.positive_real(s, 's')
        error_handling.positive_real(fs, 'fs')
        error_handling.tuple_2elem(figsize, 'figsize')
        error_handling.string(title, 'title')
        fig, ax = plt.subplots(figsize=figsize)
        plt.title(title, fontsize=fs + 5)
        map_red = plt.get_cmap('Reds')
        if lims is None:
            lims = [0., np.max(intensity)]
            y_ticks = ['0', 'max']
        else:
            y_ticks = lims
        plt.scatter(self.sys.lat.coor['x'],
                    self.sys.lat.coor['y'],
                    c=intensity,
                    s=s,
                    cmap=map_red,
                    vmin=lims[0],
                    vmax=lims[1])
        cbar = plt.colorbar(ticks=lims)
        ax.set_xticks([])
        ax.set_yticks([])
        ax.set_xlim(
            np.min(self.sys.lat.coor['x']) - 1.,
            np.max(self.sys.lat.coor['x']) + 1.)
        ax.set_ylim(
            np.min(self.sys.lat.coor['y']) - 1.,
            np.max(self.sys.lat.coor['y']) + 1.)
        cbar.ax.set_yticklabels([y_ticks[0], y_ticks[1]])
        cbar.ax.tick_params(labelsize=fs)
        ax.set_aspect('equal')
        fig.set_tight_layout(True)
        plt.draw()
        return fig
示例#5
0
文件: save.py 项目: cpoli/tbee
    def fig_lat(self, fig, name):
        '''
        Save the figure in the directory defined by the method *dir_name()*.

        :param fig: Matplotlib fig.
        :param name:  String. First part of the file name.
        '''
        error_handling.fig(fig)
        error_handling.string(name, 'name')
        name_file = self.dir_name + '/' + name + '.' + self.file_format
        fig.savefig(name_file, format=self.file_format)
示例#6
0
    def fig_lat(self, fig, name):
        '''
        Save the figure in the directory defined by the method *dir_name()*.

        :param fig: Matplotlib fig.
        :param name:  String. First part of the file name.
        '''
        error_handling.fig(fig)
        error_handling.string(name, 'name')
        name_file = self.dir_name + '/' + name + '.' + self.file_format
        fig.savefig(name_file, format=self.file_format)
示例#7
0
文件: save.py 项目: cpoli/tbee
 def __init__(self, dir_name, dir_main=None, params={}, file_format='png'):
     error_handling.string(dir_name, 'dir_name')
     error_handling.string(dir_main, 'dir_main')
     error_handling.file_format(file_format)
     self.params = params
     self.file_format = file_format
     if dir_main is None:
         self.dir_main = 'figs/'
     else:
         self.dir_main = dir_name
     self.dir_name = self.dir_name(dir_name)
     self.create_dir()
示例#8
0
 def __init__(self, dir_name, dir_main=None, params={}, file_format='png'):
     error_handling.string(dir_name, 'dir_name')
     error_handling.string(dir_main, 'dir_main')
     error_handling.file_format(file_format)
     self.params = params
     self.file_format = file_format
     if dir_main is None:
         self.dir_main = 'figs/'
     else:
         self.dir_main = dir_name
     self.dir_name = self.dir_name(dir_name)
     self.create_dir()
示例#9
0
文件: plot.py 项目: cpoli/tbee
    def intensity_area(self, intensity, s=1000., lw=1., fs=20., plt_hop=False,
                                  figsize=None, title=r'$|\psi|^2$'):
        '''
        Plot the intensity. Intensity propotional to disk shape.

        :param intensity: np.array. Intensity.
        :param s: Positive Float. Default value 1000. 
            Circle size given by s * intensity.
        :param lw: Positive Float. Default value 1. Hopping linewidths.
        :param fs: Positive Float. Default value 20. Fontsize.
        :param plt_hop: Boolean. Default value False. Plot hoppings.
        :param figsize: Tuple. Default value None. Figure size.
        :param title: String. Default value '$|\psi_{ij}|^2$'. Figure title.

        :returns:
            * **fig** -- Figure.
        '''
        error_handling.empty_ndarray(self.sys.lat.coor, 'sys.get_lattice')
        error_handling.ndarray(intensity, 'intensity', self.sys.lat.sites)
        error_handling.positive_real(s, 's')
        error_handling.positive_real(fs, 'fs')
        error_handling.boolean(plt_hop, 'plt_hop')
        error_handling.tuple_2elem(figsize, 'figsize')
        error_handling.string(title, 'title')
        fig, ax = plt.subplots()
        ax.set_xlabel('$i$', fontsize=fs)
        ax.set_ylabel('$j$', fontsize=fs)
        ax.set_title(title, fontsize=fs)
        if plt_hop:
            plt.plot([self.sys.lat.coor['x'][self.sys.hop['i'][:]], 
                             self.sys.lat.coor['x'][self.sys.hop['j'][:]]],
                            [self.sys.lat.coor['y'][self.sys.hop['i'][:]],
                             self.sys.lat.coor['y'][self.sys.hop['j'][:]]],
                            'k', lw=lw)
        for tag, color in zip(self.sys.lat.tags, self.colors):
            plt.scatter(self.sys.lat.coor['x'][self.sys.lat.coor['tag'] == tag],
                        self.sys.lat.coor['y'][self.sys.lat.coor['tag'] == tag],
                        s=100*s*intensity[self.sys.lat.coor['tag'] == tag],
                        c=color, alpha=0.5)
        ax.set_aspect('equal')
        ax.axis('off')
        x_lim = [np.min(self.sys.lat.coor['x'])-2., np.max(self.sys.lat.coor['x'])+2.]
        y_lim = [np.min(self.sys.lat.coor['y'])-2., np.max(self.sys.lat.coor['y'])+2.]
        ax.set_xlim(x_lim)
        ax.set_ylim(y_lim)
        fig.set_tight_layout(True)
        plt.draw()
        return fig
示例#10
0
文件: plot.py 项目: cpoli/tbee
    def intensity_disk(self, intensity, s=200., fs=20., lims=None, figsize=None, 
                                 title=r'$|\psi|^2$'):
        '''
        Plot the intensity. Colormap with identical disk shape.

        :param intensity: np.array.Field intensity.
        :param s: Default value 200. Disk size.
        :param fs: Default value 20. Font size.
        :param lims: List. Default value None. Colormap limits.
        :param figsize: Tuple. Default value None. Figure size.
        :param title: String. Default value '$|\psi_n|^2$'. Title.

        :returns:
            * **fig** -- Figure.
        '''
        error_handling.empty_ndarray(self.sys.lat.coor, 'sys.get_lattice')
        error_handling.ndarray(intensity, 'intensity', self.sys.lat.sites)
        error_handling.positive_real(s, 's')
        error_handling.positive_real(fs, 'fs')
        error_handling.tuple_2elem(figsize, 'figsize')
        error_handling.string(title, 'title')
        fig, ax = plt.subplots(figsize=figsize)
        plt.title(title, fontsize=fs+5)
        map_red = plt.get_cmap('Reds')
        if lims is None:
            lims = [0., np.max(intensity)]
            y_ticks = ['0', 'max']
        else:
            y_ticks = lims
        plt.scatter(self.sys.lat.coor['x'], self.sys.lat.coor['y'], c=intensity, s=s,
                         cmap=map_red, vmin=lims[0], vmax=lims[1])
        cbar = plt.colorbar(ticks=lims)
        ax.set_xticks([])
        ax.set_yticks([])
        ax.set_xlim(np.min(self.sys.lat.coor['x'])-1., np.max(self.sys.lat.coor['x'])+1.)
        ax.set_ylim(np.min(self.sys.lat.coor['y'])-1., np.max(self.sys.lat.coor['y'])+1.)
        cbar.ax.set_yticklabels([y_ticks[0], y_ticks[1]])
        cbar.ax.tick_params(labelsize=fs)
        ax.set_aspect('equal')
        fig.set_tight_layout(True)
        plt.draw()
        return fig
示例#11
0
    def butterfly(self, betas, butterfly, lw=1., fs=20., lims=None, title=''):
        '''
        Plot energies depending on a parameter.

        :param betas: np.array. Parameter values.
        :param butterfly: np.array. Eigenvalues.
        :param lw: Positive Float. Default value 1. Hopping linewidths.
        :param fs: Positive Float. Default value 20. Fontsize.
        :param lims: List, lims[0] energy min, lims[1] energy max.
        :param title: Default value ''. Figure title.
        '''
        error_handling.ndarray_empty(betas, 'betas')
        error_handling.ndarray_empty(butterfly, 'butterfly')
        error_handling.positive_real(lw, 'lw')
        error_handling.positive_real(fs, 'fs')
        error_handling.lims(lims)
        error_handling.string(title, 'title')
        i_beta_min = np.argmin(np.abs(betas))
        if lims is None:
            lims = [butterfly[i_beta_min, 0], butterfly[i_beta_min, -1]]
        ind_en = np.argwhere((butterfly[i_beta_min, :] > lims[0])
                             & (butterfly[i_beta_min, :] < lims[1]))
        ind_en = np.ravel(ind_en)
        fig, ax = plt.subplots()
        plt.title('Energies depending on strain', fontsize=fs)
        plt.xlabel(r'$\beta/\beta_{max}$', fontsize=fs)
        plt.ylabel('$E$', fontsize=fs)
        ax.set_title(title, fontsize=fs)
        plt.yticks(np.arange(lims[0], lims[1] + 1, (lims[1] - lims[0]) / 4),
                   fontsize=fs)
        plt.ylim(lims)
        beta_max = max(self.sys.betas)
        plt.xticks([-beta_max, -0.5 * beta_max, 0, 0.5 * beta_max, beta_max],
                   fontsize=fs)
        ax.set_xticklabels(('-1', '-1/2', '0', '1/2', '1'))
        plt.xlim([betas[0], betas[-1]])
        for i in ind_en:
            plt.plot(betas, butterfly[:, i], 'b', lw=lw)
        fig.set_tight_layout(True)
        plt.draw()
        return fig
示例#12
0
文件: plot.py 项目: cpoli/tbee
    def butterfly(self, betas, butterfly, lw=1., fs=20., lims=None, title=''):
        '''
        Plot energies depending on a parameter.

        :param betas: np.array. Parameter values.
        :param butterfly: np.array. Eigenvalues.
        :param lw: Positive Float. Default value 1. Hopping linewidths.
        :param fs: Positive Float. Default value 20. Fontsize.
        :param lims: List, lims[0] energy min, lims[1] energy max.
        :param title: Default value ''. Figure title.
        '''
        error_handling.ndarray_empty(betas, 'betas')
        error_handling.ndarray_empty(butterfly, 'butterfly')
        error_handling.positive_real(lw, 'lw')
        error_handling.positive_real(fs, 'fs')
        error_handling.lims(lims)
        error_handling.string(title, 'title')
        i_beta_min = np.argmin(np.abs(betas))
        if lims is None:
            lims = [butterfly[i_beta_min, 0], butterfly[i_beta_min, -1]]
        ind_en = np.argwhere((butterfly[i_beta_min, :] > lims[0]) & 
                                            (butterfly[i_beta_min, :] < lims[1]))
        ind_en = np.ravel(ind_en)
        fig, ax = plt.subplots()
        plt.title('Energies depending on strain', fontsize=fs)
        plt.xlabel(r'$\beta/\beta_{max}$', fontsize=fs)
        plt.ylabel('$E$', fontsize=fs)
        ax.set_title(title, fontsize=fs)
        plt.yticks(np.arange(lims[0], lims[1]+1, (lims[1]-lims[0])/4), fontsize=fs)
        plt.ylim(lims)
        beta_max = max(self.sys.betas)
        plt.xticks([-beta_max, -0.5*beta_max, 0, 
                        0.5*beta_max, beta_max], fontsize=fs)
        ax.set_xticklabels(('-1', '-1/2', '0', '1/2', '1'))
        plt.xlim([betas[0], betas[-1]])
        for i in ind_en:
            plt.plot(betas, butterfly[:, i], 'b', lw=lw)
        fig.set_tight_layout(True)
        plt.draw()
        return fig
示例#13
0
    def intensity_1d(self,
                     intensity,
                     ms=20.,
                     lw=2.,
                     fs=20.,
                     title=r'$|\psi^{(j)}|^2$'):
        '''
        Plot intensity for 1D lattices.

        :param intensity: np.array. Field intensity.
        :param ms: Positive Float. Default value 20. Markersize.
        :param lw: Positive Float. Default value 2. Linewith, connect sublattice sites.
        :param fs: Positive Float. Default value 20. Font size.
        :param title: String. Default value 'Intensity'. Figure title.
        '''
        error_handling.ndarray(intensity, 'intensity', self.sys.lat.sites)
        error_handling.empty_ndarray(self.sys.lat.coor, 'sys.get_lattice')
        error_handling.positive_real(ms, 'ms')
        error_handling.positive_real(lw, 'lw')
        error_handling.positive_real(fs, 'fs')
        error_handling.string(title, 'title')
        fig, ax = plt.subplots()
        ax.set_xlabel('$j$', fontsize=fs)
        ax.set_ylabel(title, fontsize=fs)
        ax.set_title(title, fontsize=fs)
        for t, c in zip(self.sys.lat.tags, self.colors):
            plt.plot(self.sys.lat.coor['x'][self.sys.lat.coor['tag'] == t],
                     intensity[self.sys.lat.coor['tag'] == t],
                     '-o',
                     color=c,
                     ms=ms,
                     lw=lw)
        plt.xlim([-1., self.sys.lat.sites])
        plt.ylim([0., np.max(intensity) + .05])
        fig.set_tight_layout(True)
        plt.draw()
        return fig
示例#14
0
    def intensity_area(self,
                       intensity,
                       s=1000.,
                       lw=1.,
                       fs=20.,
                       plt_hop=False,
                       figsize=None,
                       title=r'$|\psi|^2$'):
        '''
        Plot the intensity. Intensity propotional to disk shape.

        :param intensity: np.array. Intensity.
        :param s: Positive Float. Default value 1000. 
            Circle size given by s * intensity.
        :param lw: Positive Float. Default value 1. Hopping linewidths.
        :param fs: Positive Float. Default value 20. Fontsize.
        :param plt_hop: Boolean. Default value False. Plot hoppings.
        :param figsize: Tuple. Default value None. Figure size.
        :param title: String. Default value '$|\psi_{ij}|^2$'. Figure title.

        :returns:
            * **fig** -- Figure.
        '''
        error_handling.empty_ndarray(self.sys.lat.coor, 'sys.get_lattice')
        error_handling.ndarray(intensity, 'intensity', self.sys.lat.sites)
        error_handling.positive_real(s, 's')
        error_handling.positive_real(fs, 'fs')
        error_handling.boolean(plt_hop, 'plt_hop')
        error_handling.tuple_2elem(figsize, 'figsize')
        error_handling.string(title, 'title')
        fig, ax = plt.subplots()
        ax.set_xlabel('$i$', fontsize=fs)
        ax.set_ylabel('$j$', fontsize=fs)
        ax.set_title(title, fontsize=fs)
        if plt_hop:
            plt.plot([
                self.sys.lat.coor['x'][self.sys.hop['i'][:]],
                self.sys.lat.coor['x'][self.sys.hop['j'][:]]
            ], [
                self.sys.lat.coor['y'][self.sys.hop['i'][:]],
                self.sys.lat.coor['y'][self.sys.hop['j'][:]]
            ],
                     'k',
                     lw=lw)
        for tag, color in zip(self.sys.lat.tags, self.colors):
            plt.scatter(
                self.sys.lat.coor['x'][self.sys.lat.coor['tag'] == tag],
                self.sys.lat.coor['y'][self.sys.lat.coor['tag'] == tag],
                s=100 * s * intensity[self.sys.lat.coor['tag'] == tag],
                c=color,
                alpha=0.5)
        ax.set_aspect('equal')
        ax.axis('off')
        x_lim = [
            np.min(self.sys.lat.coor['x']) - 2.,
            np.max(self.sys.lat.coor['x']) + 2.
        ]
        y_lim = [
            np.min(self.sys.lat.coor['y']) - 2.,
            np.max(self.sys.lat.coor['y']) + 2.
        ]
        ax.set_xlim(x_lim)
        ax.set_ylim(y_lim)
        fig.set_tight_layout(True)
        plt.draw()
        return fig
示例#15
0
文件: save.py 项目: cpoli/tbee
 def ani(self, ani, name, fps=10):
     error_handling.ani(ani)
     error_handling.string(name, 'name')
     error_handling.positive_int(fps, 'fps')
     name_file = self.dir_name + '/' + name + '.mp4'
     ani.save(name_file, fps=fps, extra_args=['-vcodec', 'libx264'])
示例#16
0
 def ani(self, ani, name, fps=10):
     error_handling.ani(ani)
     error_handling.string(name, 'name')
     error_handling.positive_int(fps, 'fps')
     name_file = self.dir_name + '/' + name + '.mp4'
     ani.save(name_file, fps=fps, extra_args=['-vcodec', 'libx264'])