This is not anymore the most recent version of the API. Please refer to the newest post.

CairoPlot now has a Mailing List! For more information, refer to: this post.

So, a while ago, I’ve decided to code a library to plot some information I had.

The idea was to create simple graphics in a way they would be easy to create, beautiful and good to present to people with no or few backgrounds on math and computers.

For the ease one creation I, obviously, used Python 😀

And, as I was already a PyCairo enthusiast (that began by the time I read Aventuras no cairo by Marcelo Lira and, as pointed out by him, this other one), I decide to use it to draw my graphics.

On this first version, the CairoPlot library provides 3 functions:

dot_line_plot()

Function to plot graphics using dots and lines as seen below.

dot_line_plot (name, data, width, height, background = None, border = 0, axis = False, grid = False, h_legend = None, v_legend = None, h_bounds = None, v_bounds = None)

name – Name of the desired output file, no need to input the .svg as it will be added at runtim;

data – The list, list of lists or dictionary holding the data to be plotted;

width, height – Dimensions of the output image;

background – A 3 element tuple representing the rgb color expected for the background. If left None, a gray to white gradient will be generated;

border – Distance in pixels of a square border into which the graphics will be drawn;

axis – Whether or not the axis are to be drawn;

grid – Whether or not the gris is to be drawn;

h_legend, v_legend – lists of strings containing the horizontal and vertical legends for the axis;

h_bounds, v_bounds – tuples containing the lower and upper value bounds for the data to be plotted.

Example of Use

teste_data = [0, 1, 3, 8, 9, 0, 10, 10, 2, 1] CairoPlot.dot_line_plot('teste', teste_data, 400, 300, axis=True)

Result:

teste_data_2 = {"john" : [10, 10, 10, 10, 30], "mary" : [0, 0, 3, 5, 15], "philip" : [13, 33, 11, 25, 2]} teste_h_legend = ["jan/2008", "feb/2008", "mar/2008", "apr/2008", "may/2008"] CairoPlot.dot_line_plot('teste2', teste_data_2, 400, 300, h_legend = teste_h_legend, axis = True, grid = True)

Result:

pizza_plot()

Function to plot pizza graphics.

pizza_plot(name, data, width, height, background = None)

name – Name of the desired output file, no need to input the .svg as it will be added at runtim;

data – The list, list of lists or dictionary holding the data to be plotted;

width, height – Dimensions of the output image;

background – A 3 element tuple representing the rgb color expected for the background. If left None, a gray to white gradient will be generated;

Example of Use

teste_data = {"john" : 123, "mary" : 489, "philip" : 600 , "suzy" : 235} CairoPlot.pizza_plot("pizza_teste", teste_data, 500, 500)

Result:

gantt_chart()

Function to create Gantt Charts.

Note: the output for this function was based on the graphic seen on this post from wired.

gantt_chart(name, pieces, width, height, h_legend, v_legend, colors)

name – Name of the desired output file, no need to input the .svg as it will be added at runtim;

pieces – A list defining the spaces to be drawn. The user must pass, for each line, the index of its start and the index of its end. If a line must have two or more spaces, they must be passed inside a list;

width, height – Dimensions of the output image;

h_legend – A list of names for each of the vertical lines;

v_legend – A list of names for each of the horizontal spaces;

colors – List containing the colors expected for each of the horizontal spaces.

Example of Use

pieces = [ (0.5,5.5) , [(0,4),(6,8)] , (5.5,7) , (7,8)] h_legend = [ 'teste01', 'teste02', 'teste03', 'teste04'] v_legend = [ '0001', '0002', '0003', '0004', '0005', '0006', '0007', '0008', '0009', '0010' ] colors = [ (1.0, 0.0, 0.0), (1.0, 0.7, 0.0), (1.0, 1.0, 0.0), (0.0, 1.0, 0.0) ] CairoPlot.gantt_chart('gantt_teste', pieces, 600, 300, h_legend, v_legend, colors)

Result:

So, I think it’s ready for you guys to use. CairoPlot Google Code Project

The support is also open :D, whenever you need, feel free to contact at alf.rodrigo@gmail.com or leave a comment.