Ejemplo n.º 1
0
 def makeDetachfigure(self):
     if hasattr(self, 'figure4'):
         pass
     else:
         self.figure4 = Figure()
         self.canvas4 = FigCanvas(self.figure4)
         self.ax4 = self.figure4.add_subplot(111)
     if hasattr(self, 'figure5'):
         pass
     else:
         self.ax4 = self.figure4.add_subplot(111)
         self.figure5 = Figure()
         self.canvas5 = FigCanvas(self.figure5)
         self.ax5 = self.figure5.add_subplot(111)
     self.detach_plot_TT()
Ejemplo n.º 2
0
def plot_raw_dataset_um(
        points_um,
        savedir='',
        title='images',
        grid=(3, 3),
        figsize=(8, 8),
        size=0.1,
        dpi=300,
        invert_yaxis=True,
):
    '''
    Plot the mRNA spots for each gene.
    '''

    print('Plotting mRNA spots of selected genes...')
    if not os.path.exists(savedir):
        os.makedirs(savedir)

    genes_per_plot = grid[0] * grid[1]
    num_plots, remain = divmod(len(points_um), genes_per_plot)

    if remain != 0:
        num_plots += 1

    gene_list = list(points_um.keys())
    gene_idx = 0

    for plot_num in range(num_plots):
        fig = Figure(figsize=figsize, dpi=dpi)
        canvas = FigCanvas(fig)
        fig.set_canvas(canvas)

        for gridpos in range(genes_per_plot):
            if gene_idx == len(points_um):
                break
            ax = fig.add_subplot(grid[0], grid[1], gridpos + 1)

            ax.scatter(
                points_um[gene_list[gene_idx]][:, 1],
                points_um[gene_list[gene_idx]][:, 0],
                s=size,
            )
            ax.set_aspect('equal')
            ax.set_title(gene_list[gene_idx])

            if invert_yaxis:
                ax.invert_yaxis()
            gene_idx += 1

        fig.suptitle(title + f'\n {plot_num + 1} of {num_plots}')
        fig.tight_layout(rect=(0, 0, 1, .94))

        savename = (
            f'raw_image_{plot_num+1}_{datetime.now().strftime("%Y%m%d_%H%M%S")}.png'
        )
        fig.savefig(os.path.join(savedir, savename), dpi=dpi)

        canvas.close()
        fig.clear()
        plt.close()
    def __init__(self):

        super(PlotWindow, self).__init__()

        self.figure = plt.figure()
        self.canvas = FigCanvas(self.figure)
        self.toolbar = Navbar(self.canvas, self)

        layout = QVBoxLayout()
        layout.addWidget(self.canvas)
        layout.addWidget(self.toolbar)

        self.setLayout(layout)
        self.show()
    def initUI(self):
        QMainWindow().setCentralWidget(QWidget())

        self.setLayout(QVBoxLayout())
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.layout().setSpacing(0)

        canvas = FigCanvas(self.fig)
        canvas.draw()

        scroll = QScrollArea(self)
        scroll.setWidget(canvas)

        nav = NabToolbar(canvas, self)
        self.layout().addWidget(nav)
        self.layout().addWidget(scroll)

        self.show_basic()
    def plotALot(
            self,
            gene_list,  # list of genes to plot
            savedir="",
            title="images",
            grid=(4, 8),  # grid to plot for each figure
            figsize=(16, 9),
            dpi=300,
    ):
        """
        plot a lot of intensity maps
        from a list of genes
        """
        genes_per_plot = grid[0] * grid[1]
        num_plots, remainder = divmod(len(gene_list), (genes_per_plot))
        # add an extra plot if
        # number of genes is not perfectly divisible by number of plots
        if remainder != 0:
            num_plots += 1

        for img_num in range(len(self.img_arrays)):

            # set up index for number of genes already plotted
            # ------------------------------------------------
            reordered_idx = 0

            for plot_num in range(num_plots):

                # set up figure canvas
                # --------------------
                fig = Figure(figsize=figsize, dpi=dpi)
                canvas = FigCanvas(fig)
                fig.set_canvas(canvas)

                for gridpos in range(genes_per_plot):

                    # check if we have reached end of gene list
                    # -----------------------------------------
                    if reordered_idx == len(gene_list) - 1:
                        break

                    # create temporary axes reference
                    # -------------------------------
                    ax = fig.add_subplot(grid[0], grid[1], gridpos + 1)

                    # plot the current gene
                    # ---------------------
                    array_idx = self.gene_index_dict[gene_list[reordered_idx]]
                    ax.imshow(self.img_arrays[img_num][array_idx, ...],
                              cmap="hot")
                    ax.set_title(gene_list[reordered_idx])

                    # increment gene index
                    # --------------------
                    reordered_idx += 1

                fig.suptitle(title + f"\n{self.hdf5_file_list[img_num]}"
                             f"\n({plot_num + 1} of {num_plots})")
                fig.tight_layout(rect=(0, 0, 1, .94))

                # save the plot
                # -------------
                savename = (
                    f"image_{img_num + 1}_{title.replace(' ','_')}"
                    f"_{plot_num + 1}of{num_plots}_{self.time_str}.png")
                if not os.path.exists(savedir):
                    os.mkdir(savedir)
                fig.savefig(os.path.join(savedir, savename), dpi=dpi)

                # close the canvas
                # ----------------
                canvas.close()
                fig.clear()
Ejemplo n.º 6
0
def plotALot(
        img_array,
        gene_index_dict,  # list of genes to plot
        reordered_genes=None,
        savedir="",
        title="images",
        grid=(3, 6),  # grid to plot for each figure
        figsize=(16, 9),
        dpi=300,
):
    """
    plot a lot of images from a list of genes
    """
    genes_per_plot = grid[0] * grid[1]
    num_plots, remainder = divmod(len(gene_index_dict), (genes_per_plot))
    # add an extra plot if
    # number of genes is not perfectly divisible by number of plots
    if remainder != 0:
        num_plots += 1

    if reordered_genes is None:
        reordered_genes = [
            None,
        ] * len(gene_index_dict)
        for gene in gene_index_dict:
            reordered_genes[gene_index_dict[gene]["index"]] = gene

    # set up index for number of genes already plotted
    # ------------------------------------------------
    array_idx = 0
    for plot_num in range(num_plots):
        # set up figure canvas
        # --------------------
        fig = Figure(figsize=figsize, dpi=dpi)
        canvas = FigCanvas(fig)
        fig.set_canvas(canvas)

        for gridpos in range(genes_per_plot):
            # check if we have reached end of gene list
            # -----------------------------------------
            if array_idx == len(gene_index_dict):
                break

            # create temporary axes reference
            # -------------------------------
            ax = fig.add_subplot(grid[0], grid[1], gridpos + 1)

            # plot the current gene (array_idx)
            # ---------------------
            gene = reordered_genes[array_idx]
            ax.imshow(img_array[gene_index_dict[gene]["index"], ...],
                      cmap="hot")
            ax.set_title(gene)
            ax.grid(False)

            # increment gene index
            # --------------------
            array_idx += 1
        fig.suptitle(title + f" ({plot_num + 1} of {num_plots})")
        fig.tight_layout(rect=(0, 0, 1, .94))

        # save the plot
        #        time_now = datetime.datetime.now().strftime("%Y%m%d_%H%M")
        savename = (f"{title.replace(' ','_')}"
                    f"_{plot_num + 1}of{num_plots}.png")

        if not os.path.exists(savedir):
            os.mkdir(savedir)
        fig.savefig(os.path.join(savedir, savename), dpi=dpi)

        canvas.close()
        fig.clear()
Ejemplo n.º 7
0
 def __init__(self):
     # Inheritage from the base/super class
     super(self.__class__, self).__init__()
     self.setupUi(self)
     self.icon2 = QIcon()
     self.icon2.addPixmap(QPixmap(resource_path("SimPel_icon.ico")))
     self.setWindowIcon(self.icon2)
     self.versionnumber = '1.0.0'
     # Customized QWidgets as containing matplotlib figure instances
     self.figure = Figure()
     self.figure.set_facecolor('white')
     self.canvas = FigCanvas(self.figure)
     self.layout = QVBoxLayout(self.widgetplot)
     self.layout.addWidget(self.canvas)
     self.ax = self.figure.add_subplot(111)
     self.ax.set_yticks([])
     self.ax.set_xticks([])
     self.figure2 = Figure()
     self.figure2.set_facecolor('white')
     self.canvas2 = FigCanvas(self.figure2)
     self.layout2 = QVBoxLayout(self.Distancedistrwindow)
     self.layout2.addWidget(self.canvas2)
     self.ax2 = self.figure2.add_subplot(111)
     self.ax2.set_yticks([])
     self.ax2.set_xticks([])
     self.figure3 = Figure()
     self.figure3.set_facecolor('white')
     self.canvas3 = FigCanvas(self.figure3)
     self.layout3 = QVBoxLayout(self.FTwindow)
     self.layout3.addWidget(self.canvas3)
     self.ax3 = self.figure3.add_subplot(111)
     self.ax3.set_yticks([])
     self.ax3.set_xticks([])
     self.toolbar = Navi(self.canvas, self)
     self.toolbar.hide()
     # Initialize all parameters
     initialize(self)
     self.configs = configs
     self.configs_str = configs_str
     self.configs_lim_min = configs_lim_min
     self.configs_lim_max = configs_lim_max
     # ALL SIGNAL/SLOT CONNECTIONS
     self.Startbutton.clicked.connect(self.make_calculation)
     self.zoomButtonPeldorTT.clicked.connect(self.zoominPELDORTT)
     self.panPELDORTT.clicked.connect(self.makepanPELDORTT)
     self.DetachButton.clicked.connect(self.makeDetachfigure)
     self.Distance1edit.textChanged.connect(
         lambda: self.read_dist(self.Distance1edit.text(), 0))
     self.Distance2edit.textChanged.connect(
         lambda: self.read_dist(self.Distance2edit.text(), 1))
     self.Distance3edit.textChanged.connect(
         lambda: self.read_dist(self.Distance3edit.text(), 2))
     self.Distance4edit.textChanged.connect(
         lambda: self.read_dist(self.Distance4edit.text(), 3))
     self.Distance5edit.textChanged.connect(
         lambda: self.read_dist(self.Distance5edit.text(), 4))
     self.Coeff1edit.textChanged.connect(
         lambda: self.read_coeff(self.Coeff1edit.text(), 0))
     self.Coeff2edit.textChanged.connect(
         lambda: self.read_coeff(self.Coeff2edit.text(), 1))
     self.Coeff3edit.textChanged.connect(
         lambda: self.read_coeff(self.Coeff3edit.text(), 2))
     self.Coeff4edit.textChanged.connect(
         lambda: self.read_coeff(self.Coeff4edit.text(), 3))
     self.Coeff5edit.textChanged.connect(
         lambda: self.read_coeff(self.Coeff5edit.text(), 4))
     self.Standard1.textChanged.connect(
         lambda: self.read_sigmas(self.Standard1.text(), 0))
     self.Standard2.textChanged.connect(
         lambda: self.read_sigmas(self.Standard2.text(), 1))
     self.Standard3.textChanged.connect(
         lambda: self.read_sigmas(self.Standard3.text(), 2))
     self.Standard4.textChanged.connect(
         lambda: self.read_sigmas(self.Standard4.text(), 3))
     self.Standard5.textChanged.connect(
         lambda: self.read_sigmas(self.Standard5.text(), 4))
     self.Timescalebox.valueChanged.connect(self.set_stepsize)
     self.Timescalebox.lineEdit().setReadOnly(True)
     self.Timescaleedit.textChanged.connect(self.read_timescale)
     self.Moddepthedit.textChanged.connect(self.read_moddpeth)
     self.Bgdecayedit.textChanged.connect(self.read_bgdecy)
     self.BgDimbox.valueChanged.connect(self.set_bgdim)
     self.BgDimbox.lineEdit().setReadOnly(True)
     self.EnableBgButton.toggled.connect(
         lambda: self.btn1state(self.EnableBgButton))
     self.ShowBGButton.toggled.connect(
         lambda: self.btn2state(self.ShowBGButton))
     self.Sigmaedit.textChanged.connect(self.read_sigma)
     self.Universal_standard_dev_button.toggled.connect(
         lambda: self.use_universal_sigma(self.Universal_standard_dev_button
                                          ))
     self.EnableNoiseButton.toggled.connect(
         lambda: self.btn3state(self.EnableNoiseButton))
     self.SNR_edit.textChanged.connect(self.read_SNR)
     self.Checkbox_superadaptive.stateChanged.connect(
         lambda: self.use_superadaptive_Gaussian(self.Checkbox_superadaptive
                                                 ))
     self.ButtonFullyAdaptive.toggled.connect(
         lambda: self.btn5state(self.ButtonFullyAdaptive))
     self.fresnelbutton.toggled.connect(
         lambda: self.btn7state(self.fresnelbutton))
     self.User_defined_distr.toggled.connect(
         lambda: self.Userdef_Dist(self.User_defined_distr))
     self.Load_experimental_button.clicked.connect(self.open_file_TT)
     self.Configurations.clicked.connect(self.open_config)
     self.Loadbutton_User_def.clicked.connect(self.open_file)
     self.Savebutton.clicked.connect(self.save_file)
     self.Closebutton.clicked.connect(self.close_GUI)
Ejemplo n.º 8
0
def compare_kde_level(
    kde_files,
    savedir='.',
    title='plot',
    grid=(2, 2),
    figsize=(8, 8),
    dpi=300,
    #                      invert_yaxis=True,
    xlim=None,
    ylim=None,
):
    '''
    Zooming in a particular case to select the proper KDE smoothing level.
        - kde_files: a dictionary of kde result for comparison;
            key: kde_level
            value: kde_file_name
        - savedir, samename: the output plot
        - xlim, ylim: the zooming region
    '''
    if not os.path.exists(savedir):
        os.makedirs(savedir)

    kde_per_plot = grid[0] * grid[1]
    num_plots, remain = divmod(len(kde_files), kde_per_plot)
    if remain != 0:
        num_plots += 1

    kde_list = list(kde_files.keys())
    kde_idx = 0
    for plot_num in range(num_plots):
        fig = Figure(figsize=figsize, dpi=dpi)
        canvas = FigCanvas(fig)
        fig.set_canvas(canvas)

        for gridpos in range(kde_per_plot):
            if kde_idx == len(kde_files):
                break

            kde = kde_list[kde_idx]
            kde_file = kde_files[kde]
            array_kde = np.load(kde_file)

            # KDE files naming convention (example): pdf_sd1_bw2_GENE.npy
            ax = fig.add_subplot(grid[0], grid[1], gridpos + 1)
            ax.imshow(array_kde[:, :, 0], aspect='equal')
            scalebar = ScaleBar(1, 'um', pad=0.2, font_properties={'size': 12})
            ax.add_artist(scalebar)
            if xlim is not None:
                ax.set_xlim(xlim)
            if ylim is not None:
                ax.set_ylim(ylim)


#            if invert_yaxis:
#                ax.invert_yaxis()
            ax.set_title(f'kde = {kde}')
            kde_idx += 1

        fig.suptitle(f'{title}_{plot_num+1}/{num_plots}')
        fig.tight_layout(rect=(0, 0, 1, 0.9))

        savename = (f'{title}_{plot_num+1}_'
                    f'{datetime.now().strftime("%Y%m%d_%H%M%S")}.png')
        fig.savefig(os.path.join(savedir, savename), dpi=dpi)
        canvas.close()
        fig.clear()

    return True