All Projects → guiwitz → microfilm

guiwitz / microfilm

Licence: other
Creating figures and animations for multi-channel images with a focus on microscopy.

Programming Languages

Jupyter Notebook
11667 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to microfilm

Pandoc Plot
Render and include figures in Pandoc documents using your plotting toolkit of choice
Stars: ✭ 75 (+240.91%)
Mutual labels:  matplotlib, plotting
EOmaps
A library to create interactive maps of geographical datasets
Stars: ✭ 193 (+777.27%)
Mutual labels:  matplotlib, plotting
Cmasher
Scientific colormaps for making accessible, informative and 'cmashing' plots
Stars: ✭ 149 (+577.27%)
Mutual labels:  matplotlib, plotting
Adjusttext
A small library for automatically adjustment of text position in matplotlib plots to minimize overlaps.
Stars: ✭ 731 (+3222.73%)
Mutual labels:  matplotlib, plotting
expyplot
Matplotlib for Elixir
Stars: ✭ 27 (+22.73%)
Mutual labels:  matplotlib, plotting
Mplcyberpunk
"Cyberpunk style" for matplotlib plots
Stars: ✭ 762 (+3363.64%)
Mutual labels:  matplotlib, plotting
2021-bordeaux-dataviz
Scientific Visualization Crash Course (Python & Matplotlib)
Stars: ✭ 20 (-9.09%)
Mutual labels:  matplotlib, plotting
Brokenaxes
Create matplotlib plots with broken axes
Stars: ✭ 266 (+1109.09%)
Mutual labels:  matplotlib, plotting
planetMagFields
Routines to plot magnetic fields of planets in our solar system
Stars: ✭ 27 (+22.73%)
Mutual labels:  matplotlib, plotting
dufte
📈 Minimalistic Matplotlib style
Stars: ✭ 196 (+790.91%)
Mutual labels:  matplotlib, plotting
Chartpy
Easy to use Python API wrapper to plot charts with matplotlib, plotly, bokeh and more
Stars: ✭ 426 (+1836.36%)
Mutual labels:  matplotlib, plotting
SciPlot-PyQt
A Matplotlib-wrapped user-interface for creating and editing publication-ready images and plots
Stars: ✭ 32 (+45.45%)
Mutual labels:  matplotlib, plotting
Pyplot.jl
Plotting for Julia based on matplotlib.pyplot
Stars: ✭ 347 (+1477.27%)
Mutual labels:  matplotlib, plotting
geneview
Genomics data visualization in Python by using matplotlib.
Stars: ✭ 38 (+72.73%)
Mutual labels:  matplotlib, plotting
Joypy
Joyplots in Python with matplotlib & pandas 📈
Stars: ✭ 322 (+1363.64%)
Mutual labels:  matplotlib, plotting
Scientific Visualization Book
An open access book on scientific visualization using python and matplotlib
Stars: ✭ 6,336 (+28700%)
Mutual labels:  matplotlib, plotting
Matplotlib
matplotlib: plotting with Python
Stars: ✭ 14,738 (+66890.91%)
Mutual labels:  matplotlib, plotting
Matplotlib Venn
Area-weighted venn-diagrams for Python/matplotlib
Stars: ✭ 260 (+1081.82%)
Mutual labels:  matplotlib, plotting
texfig
Utility to generate PGF vector files from Python's Matplotlib plots to use in LaTeX documents.
Stars: ✭ 58 (+163.64%)
Mutual labels:  matplotlib, plotting
joypy
Joyplots in Python with matplotlib & pandas 📈
Stars: ✭ 418 (+1800%)
Mutual labels:  matplotlib, plotting

Binder build PyPI - License PyPI - Python Version PyPI PyPI - Status

microfilm

This package is a collection of tools to display and analyze 2D and 2D time-lapse microscopy images. In particular it makes it straightforward to create figures containing multi-channel images represented in a composite color mode as done in the popular image processing software Fiji. It also allows to easily complete such figures with standard annotations like labels and scale bars. In case of time-lapse data, the figures are turned into animations which can be interactively browsed from a Jupyter notebook, saved in standard movie formats (mp4, gif etc.) and completed with time counters. Finally, figures and animations can easily be combined into larger panels. These main functionalities are provided by the microfilm.microplot and microfilm.microanim modules.

Following the model of seaborn, microfilm is entirely based on Matplotlib and tries to provide good defaults to produce good microcopy figures out-of-the-box. It however also offers complete access to the Matplotlib structures like axis and figures underlying the microfilm objects, allowing thus for the creation of arbitrarily complex plots.

Installation

You can install this package directly from Github using:

pip install microfilm

To test the package via the Jupyter interface and the notebooks available here you can create a conda environment using the environment.yml file:

conda env create -f environment.yml

Simple plot

It is straightforward to create a ready-to-use plot of a multi-channel image dataset. In the following code snippet, we load a Numpy array of a multi-channel time-lapse dataset with shape CTXY (three channels). The figure below showing the time-point t=10 is generated in a single command with a few options and saved as a png:

import numpy as np
import skimage.io
from microfilm.microplot import microshow

image = skimage.io.imread('../demodata/coli_nucl_ori_ter.tif')
time = 10

microim = microshow(images=image[:, time, :, :], fig_scaling=5,
                 cmaps=['pure_blue','pure_red', 'pure_green'],
                 unit='um', scalebar_size_in_units=3, scalebar_unit_per_pix=0.065, scalebar_text_centered=True, scalebar_font_size=0.04,label_text='A', label_font_size=0.04)

microim.savefig('../illustrations/composite.png', bbox_inches = 'tight', pad_inches = 0, dpi=600)

image

Animation

It is then easy to extend a simple figure into an animation as both objects take the same options. Additionally, a time-stamp can be added to the animation. This code generates the movie visible below:

import numpy as np
import skimage.io
from microfilm.microanim import Microanim

image = skimage.io.imread('../demodata/coli_nucl_ori_ter.tif')

microanim = Microanim(data=image, cmaps=['pure_blue','pure_red', 'pure_green'], fig_scaling=5,
                      unit='um', scalebar_size_in_units=3, scalebar_unit_per_pix=0.065,
                      scalebar_font_size=0.04)

microanim.add_label('A', label_font_size=30)
microanim.add_time_stamp('T', 10, location='lower left', timestamp_size=20)

microanim.save_movie('../illustrations/composite_movie.gif', fps=15)

image

Panels

Both simple figures and animations can be combined into larger panels via the microplot.Micropanel and microanim.Microanimpanel objects. For example we can first create two figures microim1 and microim2 and then combine them into micropanel:

from microfilm import microplot
import skimage.io

image = skimage.io.imread('../demodata/coli_nucl_ori_ter.tif')

microim1 = microplot.microshow(images=[image[0, 10, :, :], image[1, 10, :, :]],
                               cmaps=['Greys', 'pure_magenta'], flip_map=[False, False],
                               label_text='A', label_color='black')
microim2 = microplot.microshow(images=[image[0, 10, :, :], image[2, 10, :, :]],
                               cmaps=['Greys', 'pure_cyan'], flip_map=[False, False],
                               label_text='B', label_color='black')

micropanel = microplot.Micropanel(rows=1, cols=2, figsize=[4,3])

micropanel.add_element(pos=[0,0], microim=microim1)
micropanel.add_element(pos=[0,1], microim=microim2)

micropanel.savefig('../illustrations/panel.png', bbox_inches = 'tight', pad_inches = 0, dpi=600)

image

And similarly for animations:

from microfilm import microanim
import skimage.io

image = skimage.io.imread('../demodata/coli_nucl_ori_ter.tif')

microanim1 = microanim.Microanim(data=image[[0,1],::], cmaps=['Greys', 'pure_magenta'],
                                 flip_map=[False, False], label_text='A', label_color='black')
microanim2 = microanim.Microanim(data=image[[0,2],::], cmaps=['Greys', 'pure_cyan'],
                                 flip_map=[False, False], label_text='B', label_color='black')

microanim1.add_time_stamp(unit='T', unit_per_frame='3', location='lower-right', timestamp_color='black')

animpanel = microanim.Microanimpanel(rows=1, cols=2, figsize=[4,3])
animpanel.add_element(pos=[0,0], microanim=microanim1)
animpanel.add_element(pos=[0,1], microanim=microanim2)

animpanel.save_movie('../illustrations/panel.gif')

image

Additional functionalities

In addition to these main plotting capabilities, the packages also offers:

  • microfilm.colorify: a series of utility functions used by the main functions to create the composite color images. It contains functions to create colormaps, to turn 2D arrays into 3D-RGB arrays with appropriate colormaps etc.
  • microfilm.dataset: a module offering a simple common data structure to handle multi-channel time-lapse data from multipage tiffs, series of tiff files, Nikon ND2 files, H5 and Numpy arrays. Requirement to use this module are at the moment very constrained (e.g. dimension order of Numpy arrays, name of H5 content etc.) but might evolve in the future.

Authors

This package has been created by Guillaume Witz, Microscopy Imaging Center and Science IT Support, University of Bern.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].