ImagePanel: A wx.Panel for Image Display

The ImagePanel class supports image display, including gray-scale and false-color maps or contour plots for 2-D arrays of intensity. ImagePanel is derived from a wx.Panel and so can be easily included in a wxPython GUI application.

While the image can be customized programmatically, the only interactivity built in to the ImagePanel itself is the ability to zoom in and out. In contrast, an ImageFrame provides many more ways to manipulate the displayed image, as will be discussed below.

class ImagePanel(parent, size=(525, 450), dpi=100, messenger=None, **kws)

Create an Image Panel, a wx.Panel

Parameters:
  • parent – wx parent object.

  • size – figure size in pixel.

  • dpi – dots per inch for figure.

  • messenger (callable or None) – function for accepting output messages.

The size, and dpi arguments are sent to matplotlib’s Figure. The messenger should should be a function that accepts text messages from the panel for informational display. The default value is to use sys.stdout.write().

Extra keyword parameters are sent to the wx.Panel.

The configuration settings for an image (its colormap, smoothing, orientation, and so on) are controlled through configuration attributes.

ImagePanel methods

display(data, x=None, y=None, style='image', **kws)

display a new image from the 2-D numpy array data. If provided, the x and y values will be used as coordinates for the pixels for display purposes.

clear()

clear the image

update_image(data)

update the image with new data. This can be significantly faster than re-displaying the data.

redraw()

redraw the image, as when the configuration attributes have been changed.

ImagePanel callback attributes

An ImagePanel instance has several callback attributes that can be used to get information from the image panel.

data_callback

A function that is called with the data and x and y values each time display() is called.

lasso_callback

A function that is called with the data and selected points when the cursor is in lasso mode and a new set of points has been selected.

cursor_callback

A function that is called with the x and y position clicked on each left-button event.

contour_callback

A function that is called with the contour levels each time display() is called with style='contour'.

ImageFrame: A wx.Frame for Image Display

In addition to providing a top-level window frame holding an ImagePanel, an ImageFrame provides the end-user with many ways to manipulate the image:

  1. display x, y, intensity coordinates (left-click)

  2. zoom in on a particular region of the plot (left-drag).

  3. change color maps.

  4. flip and rotate image.

  5. select optional smoothing interpolation.

  6. modify intensity scales.

  7. save high-quality plot images (as PNGs), copy to system clipboard, or print.

These options are all available programmatically as well, by setting the configuration attributes and redrawing the image.

class ImageFrame(parent, size=(550, 450), **kws)

Create an Image Frame, a wx.Frame. This is a Frame with an ImagePanel and several menus and controls for changing the color table and smoothing options as well as switching the display style between “image” and “contour”.

Image configuration with ImageConfig

To change any of the attributes of the image on an ImagePanel, you can set the corresponding attribute of the panel’s conf. That is, if you create an ImagePanel, you can set the colormap with:

import matplotlib.cm as cmap
im_panel = ImagePanel(parent)
im_panel.display(data_array)

# now change colormap:
im_panel.conf.cmap = cmap.cool
im_panel.redraw()

# now rotate the image by 90 degrees (clockwise):
im_panel.conf.rot = True
im_panel.redraw()

# now flip the image (top/bottom), apply log-scaling,
# and apply gaussian interpolation
im_panel.conf.flip_ud = True
im_panel.conf.log_scale = True
im_panel.conf.interp = 'gaussian'
im_panel.redraw()

For a ImageFrame, you can access this attribute as frame.panel.conf.cmap.

The list of configuration attributes and their meaning are given in the Table of Image Configuration attributes

Table of Image Configuration attributes: All of these are members of the panel.conf object, as shown in the example above.

attribute

type

default

meaning

rot

bool

False

rotate image 90 degrees clockwise

flip_ud

bool

False

flip image top/bottom

flip_lr

bool

False

flip image left/right

log_scale

bool

False

display log(image)

contrast_level

float

0

contrast level (percentage)

cmap

colormap

gray

colormap for intensity scale

cmap_reverse

bool

False

reverse colormap

interp

string

nearest

interpolation, smoothing algorithm

xylims

list

None

xmin, xmax, ymin, ymax for display

cmap_lo

int

0

low intensity percent for colormap mapping

cmap_hi

int

100

high intensity percent for colormap mapping

int_lo

float

None

low intensity when autoscaling is off

int_hi

float

None

high intensity when autoscaling is off

style

string

‘image’

‘image’ or ‘contour’

ncontour_levels

int

10

number of contour levels

contour_levels

list

None

list of contour levels

contour_labels

list

None

list of contour labels

Some notes:

  1. cmap is an instance of a matplotlib colormap.

  2. cmap_lo and cmap_hi set the low and high values for the sliders that compress the colormap, and are on a scale from 0 to 100.

  3. In contrast, int_lo and int_hi set the map intensity values and so can be used to put two different maps on the same intensity intensity scale.

  4. contrast_level can be used to automatically set the int_lo and int_hi values based on the distribution of intensities in the data.