X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fplot-hist.c;h=6b2e7f9f177bfe74523dc67448a39e75c882d47d;hb=5cf163b77cda54d0a6fa531ab4eb0a72d030969f;hp=7208d3fa1257a5a2b2272737bc02bf103155789d;hpb=72318eac4782acf0215da8dfd4575ac66a9a9f74;p=pspp diff --git a/src/plot-hist.c b/src/plot-hist.c index 7208d3fa12..6b2e7f9f17 100644 --- a/src/plot-hist.c +++ b/src/plot-hist.c @@ -17,6 +17,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* If you add/modify any public symbols in this file, don't forget to + change the stubs in dummy-chart.c */ + #include #include @@ -36,6 +39,9 @@ void histogram_write_legend(struct chart *ch, const struct normal_curve *norm) { char buf[100]; + if ( !ch ) + return ; + pl_savestate_r(ch->lp); sprintf(buf,"N = %.2f",norm->N); @@ -63,6 +69,8 @@ hist_draw_bar(struct chart *ch, const gsl_histogram *hist, int bar) double lower; double height; + if ( !ch ) + return ; const size_t bins = gsl_histogram_bins(hist); const double x_pos = (ch->data_right - ch->data_left) * bar / (double) bins ; const double width = (ch->data_right - ch->data_left) / (double) bins ; @@ -107,22 +115,22 @@ histogram_plot(const gsl_histogram *hist, int i; int bins; - struct chart ch; + struct chart *ch; bins = gsl_histogram_bins(hist); - chart_initialise(&ch); - chart_write_title(&ch, _("HISTOGRAM")); + ch = chart_create(); + chart_write_title(ch, _("HISTOGRAM")); - chart_write_ylabel(&ch, _("Frequency")); - chart_write_xlabel(&ch, factorname); + chart_write_ylabel(ch, _("Frequency")); + chart_write_xlabel(ch, factorname); - chart_write_yscale(&ch, 0, gsl_histogram_max_val(hist), 5); + chart_write_yscale(ch, 0, gsl_histogram_max_val(hist), 5); for ( i = 0 ; i < bins ; ++i ) - hist_draw_bar(&ch, hist, i); + hist_draw_bar(ch, hist, i); - histogram_write_legend(&ch, norm); + histogram_write_legend(ch, norm); if ( show_normal ) { @@ -139,25 +147,25 @@ histogram_plot(const gsl_histogram *hist, gsl_histogram_get_range(hist, bins - 1, ¬_used, &x_max); assert(range == x_max - not_used); - abscissa_scale = (ch.data_right - ch.data_left) / (x_max - x_min); - ordinate_scale = (ch.data_top - ch.data_bottom) / + abscissa_scale = (ch->data_right - ch->data_left) / (x_max - x_min); + ordinate_scale = (ch->data_top - ch->data_bottom) / gsl_histogram_max_val(hist) ; - pl_move_r(ch.lp, ch.data_left, ch.data_bottom); - for( d = ch.data_left; - d <= ch.data_right ; - d += (ch.data_right - ch.data_left) / 100.0) + pl_move_r(ch->lp, ch->data_left, ch->data_bottom); + for( d = ch->data_left; + d <= ch->data_right ; + d += (ch->data_right - ch->data_left) / 100.0) { - const double x = (d - ch.data_left) / abscissa_scale + x_min ; + const double x = (d - ch->data_left) / abscissa_scale + x_min ; const double y = norm->N * range * gsl_ran_gaussian_pdf(x - norm->mean, norm->stddev); - pl_fcont_r(ch.lp, d, ch.data_bottom + y * ordinate_scale); + pl_fcont_r(ch->lp, d, ch->data_bottom + y * ordinate_scale); } - pl_endpath_r(ch.lp); + pl_endpath_r(ch->lp); } - chart_finalise(&ch); + chart_submit(ch); }