Graphs in Gnumeric, usable for Gnucash too?

Jody Goldberg jody at gnome.org
Fri May 30 16:31:45 CDT 2003


On Fri, May 30, 2003 at 04:55:09PM +0200, Christian Stimming wrote:
> 
> Ok. Now I have found the code. Do you also have a place where the 
> sheet-object-graph is used, as an example?

The sheet-object-graph is currently gnumeric specific.  Although I'd
like to move the sheet-object layer down into goffice it will take a
while.  For now you want to use the lower level display in
    goffice/graph/gog-control-foocanvas

That gives you a foocanvas item to display a GogView.
 
> From gnucash, we loved to use the libguppitank interface in guppi3. 
> There, each barchart/ piechart/ scatter plot was defined by a number of 
> arguments passed by a GtkArg list, which were defined in the 
> guppi_object_pie_class, and all the putting together with axis, legends 
> and lines was fully done inside libguppitank. I.e., in gnucash we didn't 
> have to care about axes, legends, scaling etc. at all. This went very 
> smoothly. I was wondering whether it is possible in principle to copy 
> the code from guppi3/libguppitank into that new goffice/graph library... 
> any spontaneous ideas on how difficult that would be?

The new library is a lot closer semantically to guppitank than guppi
in many ways.  You'll need to do a bit of manual labour to create
the models, but its not too bad.  For a simple graph with 1 chart
and 1 plot (see README for glossary) All you'd need would be

	graph = g_object_new (GOG_GRAPH_TYPE, NULL);
	chart = gog_object_add_by_name (graph, "Chart", NULL));
	plot  = gog_object_add_by_name (chart, "Plot",
		gog_plot_new_by_name ("GogBarColPlot"));
	g_object_set (plot,
		      "horizontal", FALSE,
		      "type",	    "stacked",
		      NULL);
	GogSeries *series = gog_plot_new_series	(GOG_PLOT (plot));
	gog_series_set_dim (series, 1,
		gnu_cash_data_new (.....), NULL);

That should be enough to generate a model with 1 stacked col plot
with some gnu_cash supplied data.  You'd need to manually tack on a
legend
	legend = gog_object_add_by_name (chart, "Legend", NULL));
but my goal is to autogenerate axis and gridlines.  They would will
still be changeable by you, but at least the initial creation would
be handled automagicly.  I can't really comment on axes yet because
that code is not quite ready.

To display it
	foocanvasitem = foo_canvas_item_new (
		foo_canvas_root (FOO_CANVAS (canvas)), GOG_CONTROL_FOOCANVAS_TYPE,
		"model", graph,
		"w",	how big do you want it in pixels
		"h",
		"logical_width_pts",   how big is it logically in points
		"logical_height_pts",
		NULL);

I've only written a foocanvas wrapper rather than a gnome-canvas,
but the amount of code is trivial.  Its basicly just using the
libart renderer to generate a pixbuf.  You could create so other
display mechanism if necessary.  Printing and svg export are also
unwritten at present, they will required another rendering backend.
Again, the amount of code should hopefully be inconsequential.

Hope that answers more questions than it raises
    Jody


More information about the gnucash-devel mailing list