1#ifndef GRAPH_H 2#define GRAPH_H 3 4struct graph; 5struct graph_label; 6 7typedef struct graph_label * graph_label_t; 8 9#define GRAPH_DEFAULT_FONT "Sans 12" 10 11struct graph *graph_new(unsigned int xdim, unsigned int ydim, const char *font); 12/* graph_new() Returns a new graph structure of the given dimensions and font */ 13void graph_set_size(struct graph *g, unsigned int xdim, unsigned int ydim); 14/* graph_set_size() Changes the size of a graph to the given dimensions. */ 15void graph_set_position(struct graph *g, double xoffset, double yoffset); 16/* graph_set_position() sets the x- and y-offset to translate the graph */ 17void bar_graph_draw(struct graph *g, cairo_t *cr); 18/* bar_graph_draw() draws the given graph as a bar graph */ 19void line_graph_draw(struct graph *g, cairo_t *cr); 20/* line_graph_draw draws the given graph as a line graph */ 21void line_graph_set_data_count_limit(struct graph *g, int per_label_limit); 22/* line_graph_set_data_count_limit() limits the amount of data which can 23 * be added to a line graph. Once the limit is reached, the oldest data 24 * is discarded as new data is added 25 */ 26void graph_set_font(struct graph *g, const char *font); 27void graph_title(struct graph *g, const char *title); 28/* graph_title() sets the main title of the graph to the given string */ 29void graph_x_title(struct graph *g, const char *title); 30/* graph_x_title() sets the title of the x axis to the given string */ 31void graph_y_title(struct graph *g, const char *title); 32/* graph_y_title() sets the title of the y axis to the given string */ 33graph_label_t graph_add_label(struct graph *g, const char *label); 34/* graph_add_label() adds a new "stream" of data to be graphed. 35 * For line charts, each label is a separate line on the graph. 36 * For bar charts, each label is a grouping of columns on the x-axis 37 * For example: 38 * 39 * | * | ** 40 * | * xxxxxxxx | ** 41 * | *** x | ** ** 42 * | *x **** | ** ** ** 43 * | xxxx* ***** | ** xx ** xx ** 44 * | x ** | ** xx ** xx ** xx 45 * | x | ** xx ** xx ** xx 46 * ----------------------- ------------------------- 47 * A B C 48 * 49 * For a line graph, the 'x's For a bar graph, 50 * would be on one "label", and 'A', 'B', and 'C' 51 * the '*'s would be on another are the labels. 52 * label. 53 */ 54 55int graph_add_data(struct graph *g, graph_label_t label, const double value); 56/* graph_add_data() is used to add data to the labels of a bar graph */ 57int graph_add_xy_data(struct graph *g, graph_label_t label, 58 const double x, const double y, const char *tooltip); 59/* graph_add_xy_data is used to add data to the labels of a line graph */ 60 61void graph_set_color(struct graph *g, graph_label_t label, 62 double red, double green, double blue); 63#define INVISIBLE_COLOR (-1.0) 64/* graph_set_color is used to set the color used to plot the data in 65 * a line graph. INVISIBLE_COLOR can be used to plot the data invisibly. 66 * Invisible data will have the same effect on the scaling of the axes 67 * as visible data. 68 */ 69 70void graph_free(struct graph *bg); 71/* free a graph allocated by graph_new() */ 72 73typedef void (*graph_axis_unit_change_callback)(struct graph *g, int power_of_ten); 74void graph_x_axis_unit_change_notify(struct graph *g, graph_axis_unit_change_callback f); 75void graph_y_axis_unit_change_notify(struct graph *g, graph_axis_unit_change_callback f); 76/* The labels used on the x and y axes may be shortened. You can register for callbacks 77 * so that you can know how the labels are shorted, typically used to adjust the axis 78 * titles to display the proper units. The power_of_ten parameter indicates what power 79 * of ten the labels have been divided by (9, 6, 3, or 0, corresponding to billions, 80 * millions, thousands and ones. 81 */ 82 83void graph_add_extra_space(struct graph *g, double left_percent, double right_percent, 84 double top_percent, double bottom_percent); 85/* graph_add_extra_space() adds extra space to edges of the the graph 86 * so that the data doesn't go to the very edges. 87 */ 88 89extern int graph_has_tooltips(struct graph *g); 90extern const char *graph_find_tooltip(struct graph *g, int x, int y); 91extern int graph_contains_xy(struct graph *p, int x, int y); 92 93extern void graph_set_base_offset(struct graph *g, unsigned int base_offset); 94extern void graph_set_graph_all_zeroes(struct graph *g, unsigned int set); 95 96extern void graph_clear_values(struct graph *g); 97 98#endif 99 100