gsl-shell.git - gsl-shell

index : gsl-shell.git
gsl-shell
summary refs log tree commit diff
path: root/plot/graph.c
diff options
context:
space:
mode:
authorFrancesco Abbate <francesco.bbt@gmail.com>2009年11月08日 15:22:33 +0000
committerFrancesco Abbate <francesco.bbt@gmail.com>2009年11月08日 15:22:33 +0000
commite8a10279d92ab7a66402bae02a8fc423a6162fd5 (patch)
tree895eda2d7fcea54f2b9a311437f5e86fbbac5bfe /plot/graph.c
parentcfa10f2e681fd6e8321ecd24f11b1f58b4209553 (diff)
downloadgsl-shell-e8a10279d92ab7a66402bae02a8fc423a6162fd5.tar.gz
Initial implementatin of plotting functions. Minor doc updates.
Diffstat (limited to 'plot/graph.c')
-rw-r--r--plot/graph.c 151
1 files changed, 151 insertions, 0 deletions
diff --git a/plot/graph.c b/plot/graph.c
new file mode 100644
index 00000000..ddfc7f2b
--- /dev/null
+++ b/plot/graph.c
@@ -0,0 +1,151 @@
+
+
+struct MultigrapherStruct
+{
+ /* multigrapher parameters (not updated over a multigrapher's lifetime) */
+ plPlotter *plotter; /* GNU libplot Plotter handle */
+ const char *output_format; /* type of libplot device driver [unused] */
+ const char *bg_color; /* color of background, if non-NULL */
+ bool save_screen; /* erase display when opening plotter? */
+ /* graph parameters (constant over any single graph) */
+ Transform x_trans, y_trans; /* user->device coor transformations */
+ Axis x_axis, y_axis; /* information on each axis */
+ grid_type grid_spec; /* frame specification */
+ double blankout_fraction; /* 1.0 means blank whole box before drawing */
+ bool no_rotate_y_label; /* useful for pre-X11R6 X servers */
+ double tick_size; /* fractional tick size */
+ double subtick_size; /* fractional subtick size (for linear axes) */
+ double frame_line_width; /* fractional width of lines in the frame */
+ double half_line_width; /* approx. half of this, in libplot coors */
+ const char *frame_color; /* color for frame (and graph, if no -C) */
+ const char *title; /* graph title */
+ const char *title_font_name; /* font for graph title */
+ double title_font_size; /* fractional height of graph title */
+ int clip_mode; /* 0, 1, or 2 (cf. clipping in gnuplot) */
+ /* following elements are updated during plotting of points; they're the
+ chief repository for internal state */
+ bool first_point_of_polyline; /* true only at beginning of each polyline */
+ double oldpoint_x, oldpoint_y; /* last-plotted point */
+ int symbol; /* symbol being plotted at each point */
+ int linemode; /* linemode used for polyline */
+};
+
+typedef struct MultigrapherStruct Multigrapher;
+
+int
+graph_show (lua_State *L)
+{
+ /* command-line parameters (constant over multigrapher operation) */
+ const char *output_format = "meta";/* libplot output format */
+ const char *bg_color = NULL; /* color of background, if non-NULL */
+ const char *bitmap_size = NULL;
+ const char *emulate_color = NULL;
+ const char *max_line_length = NULL;
+ const char *meta_portable = NULL;
+ const char *page_size = NULL;
+ const char *rotation_angle = NULL;
+ bool save_screen = false; /* save screen, i.e. no erase before plot? */
+
+ int log_axis = 0;
+ int round_to_next_tick = 0;
+ double min_x = 0.0, max_x = 0.0, spacing_x = 0.0;
+ double min_y = 0.0, max_y = 0.0, spacing_y = 0.0;
+ bool spec_min_x = false, spec_min_y = false;
+ bool spec_max_x = false, spec_max_y = false;
+ bool spec_spacing_x = false, spec_spacing_y = false;
+
+ grid_type grid_spec = AXES_AND_BOX; /* frame type for current graph */
+ bool no_rotate_y_label = false; /* used for pre-X11R6 servers */
+ const char *frame_color = "black"; /* color of frame (and graph, if no -C)*/
+ int clip_mode = 1; /* clipping mode (cf. gnuplot) */
+ /* following variables are portmanteau: x and y are included as bitfields*/
+ int log_axis = 0; /* log axes or linear axes? */
+ int round_to_next_tick = 0; /* round axis limits to nearest tick? */
+ int switch_axis_end = 0; /* axis at top/right instead of bottom/left? */
+ int omit_ticks = 0; /* omit ticks and tick labels from an axis? */
+
+ /* graph dimensions, expressed as fractions of the width of the libplot
+ graphics display [by convention square]; <0.0 means use libplot default */
+ double frame_line_width = -0.001; /* width of lines in the graph frame */
+
+ /* dimensions of graphing area, expressed as fractions of the width of
+ the libplot graphics display [by convention square] */
+ double margin_below = .2; /* margin below the plot */
+ double margin_left = .2; /* margin left of the plot */
+ double plot_height = .6; /* height of the plot */
+ double plot_width = .6; /* width of the plot */
+
+ /* dimensions, expressed as fractions of the size of the plotting area */
+ double tick_size = .02; /* size of tick marks (< 0.0 allowed) */
+ double font_size = 0.0525; /* fontsize */
+ double title_font_size = 0.07; /* title fontsize */
+ double blankout_fraction = 1.3; /* this fraction of size of plotting box
+ is erased before the plot is drawn */
+
+ /* text-related */
+ const char *font_name = NULL; /* font name, NULL -> device default */
+ const char *title_font_name = NULL; /* title font name, NULL -> default */
+ const char *symbol_font_name = "ZapfDingbats"; /* symbol font name, NULL -> default */
+ const char *x_label = NULL; /* label for the x axis, NULL -> no label */
+ const char *y_label = NULL; /* label for the y axis, NULL -> no label */
+ const char *top_label = NULL; /* title above the plot, NULL -> no title */
+
+ bool transpose_axes = false;
+
+ MultiGrapher *multigrapher;
+
+ double scale = 1.0, trans_x = 0.0, trans_y = 0.0;
+
+ struct plot * p = plot_check (L, 1);
+
+ multigrapher = new_multigrapher (output_format, bg_color, bitmap_size,
+ emulate_color, max_line_length,
+ meta_portable, page_size, rotation_angle,
+ save_screen);
+
+ array_bounds (p->points, p->length,
+ transpose_axes, clip_mode,
+ &min_x, &min_y, &max_x, &max_y,
+ spec_min_x, spec_min_y, spec_max_x, spec_max_y);
+
+ begin_graph (multigrapher, scale, trans_x, trans_y);
+
+ set_graph_parameters (multigrapher,
+ frame_line_width,
+ frame_color,
+ top_label,
+ title_font_name, title_font_size, /*for title*/
+ tick_size, grid_spec,
+ min_x, max_x, spacing_x,
+ min_y, max_y, spacing_y,
+ spec_spacing_x, spec_spacing_y,
+ plot_width, plot_height,
+ margin_below, margin_left,
+ font_name, font_size, /* for abscissa label */
+ x_label,
+ font_name, font_size, /* for ordinate label */
+ y_label,
+ no_rotate_y_label,
+ /* these args are portmanteaux */
+ log_axis, round_to_next_tick,
+ switch_axis_end, omit_ticks,
+ /* more args */
+ clip_mode,
+ blankout_fraction,
+ transpose_axes);
+
+ /* draw the graph frame (grid, ticks, etc.); draw a `canvas' (a
+ background opaque white rectangle) only if this isn't the
+ first graph */
+ draw_frame_of_graph (multigrapher, false);
+
+ /* plot the laboriously read-in array */
+ plot_point_array (multigrapher, p->points, p->length);
+
+ end_graph (multigrapher);
+
+ /* finish up by deleting our multigrapher */
+ delete_multigrapher (multigrapher);
+
+ return 0;
+}
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月18日 19:23:46 +0000

AltStyle によって変換されたページ (->オリジナル) /