7.8. Advanced Plotting¶
Warning
The following sections describe advanced features that are not intended for the average user.
7.8.1. Installing Plotting Plug-Ins¶
CellBlender supports a variety of plotting plug-ins that may be installed in the “data_plotters” folder under the cellblender addon folder (for example on a Mac it would be something like: /Applications/Blender-2.79-CellBlender/blender.app/Contents/Resources/2.79/scripts/addons/cellblender/data_plotters). Each plotting plug-in will have its own folder in that directory, and within that folder must (at least) be a file named __init__.py. As an example, the xmgrace plug-in will be found at /Applications/Blender-2.79-CellBlender/blender.app/Contents/Resources/2.79/scripts/addons/cellblender/data_plotters/xmgrace*. There may be other files required in that folder. For example, the Java Plotter requires the file PlotData.jar to be there, and the matplotlib plotter requires the files mpl_plot.py and mpl_defaults.py. The number and purposes of these additional files depends completely on the plotting plug-in.
Installing a new plotting plug-in only requires the creation of a new directory in the data_plotters directory (the name can be whatever you feel is appropriate), and the installation of the associated files (which must include an __init__.py file.
Here’s an example of a simple plotting plug-in for xmgrace:
import os
import subprocess
def find_in_path(program_name):
for path in os.environ.get('PATH','').split(os.pathsep):
full_name = os.path.join(path,program_name)
if os.path.exists(full_name) and not os.path.isdir(full_name):
return full_name
return None
def get_name():
return ( "XmGrace Plotter" )
def requirements_met():
path = find_in_path ( "xmgrace" )
if path == None:
print ( "Required program \"xmgrace\" was not found" )
return False
else:
return True
def plot ( data_path, plot_spec ):
program_path = os.path.dirname(__file__)
# XmGrace expects plain file names so translate:
plot_cmd = find_in_path ( "xmgrace" )
for plot_param in plot_spec.split():
if plot_param[0:2] == "f=":
plot_cmd = plot_cmd + " " + plot_param[2:]
pid = subprocess.Popen ( plot_cmd.split(), cwd=data_path )
Warning
This plotting api is still being developed and changes are expected!
7.8.2. Writing Plotting Plug-Ins¶
CellBlender’s plotting plug-in API is still very immature, so drastic changes may be anticipated. But for those who need to write their own plotting plug-in, the current specification is as follows…
Each plotting plug-in must have an __init__.py file containing the following functions:
get_name()
requirements_met()
plot ( data_path, plot_spec )
These are described in separate sections below.
7.8.3. get_name()¶
The get_name() function simply returns the name of this plug-in in the form of a normal python string. This is used for the user interface.
7.8.4. requirements_met()¶
The requirements_met() function is called to determine if the operating environment meets the requirements for this plug-in to work. For example, if the plug-in is written in Java, then the requirements_met function should check to see that a suitable Java Virtual Machine is installed. This function returns True if the requirements are met, and false otherwise.
7.8.5. plot ( data_path, plot_spec )¶
The plot() function actually performs the plot. The plot function takes two parameters:
data_path - a path to where the data files exist (added to each file)
plot_spec - a list of files and modifiers that describe the plotting
The data_path is fairly self-explanatory, but the plot_spec requires a little bit of explanation.
The fundamental plot specification is just a list of file names immediately prefixed with “f=” and separated by spaces:
f=mol1v1.dat f=mol1v2.dat f=mol1s1.dat f=mol2s1.dat
Every plotting plug-in should recognize the “f=” prefix as specifying the name of a file where the file itself contains two columns of numbers (time and count) in ASCII text format. As a minimum, the plug-in should be able to plot all such files in a single plot.
At this point, all additional parameters are optional … but certainly useful!
Among the optional parameters are the separators “page” and “plot”. These are inserted between file names to produce either a new page or a new plot. For example, the previous specification could plot the volume and surface molecules in two separate plots within the same page using this command:
f=mol1v1.dat f=mol1v2.dat plot f=mol1s1.dat f=mol2s1.dat
Alternatively, the the following command will put each of those plots on their own pages:
f=mol1v1.dat f=mol1v2.dat page f=mol1s1.dat f=mol2s1.dat
This command creates two pages and creates 2 plots on each page:
f=mol1v1.dat plot f=mol1v2.dat page f=mol1s1.dat plot f=mol2s1.dat
Finally, here is the current plotting plug-in API (SUBJECT TO CHANGE)
defs=filename … Loads default parameters from a python file
page … Starts a new page (figure in matplotlib)
plot … Starts a new plot (subplot in matplotlib)
color=#rrggbb … Selects a color via Red,Green,Blue values
color=color_name … Selects a color via standard color names
title=title_string … Sets the title for each plot
pagetitle=string … Sets the title for each page
xlabel=label_string … Sets the label for the x axis
ylabel=label_string … Sets the label for the y axis
legend=code … Adds a legend with code = 0..10 (-1=none)
n=name … Name used to over-ride file name in legend
f=filename … Plots the file with current settings