X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_graph.c;h=35978cf6c7077682c600079a009e77c376f05942;hb=5cc1ed2b6f1b746081a4573befc203a03e3214f3;hp=47c187ad981db4c6ec19046dd95a5639f6220d1c;hpb=34acbcb39d7f732b3cf03c928583f6774f6fe153;p=rrdtool.git diff --git a/src/rrd_graph.c b/src/rrd_graph.c index 47c187a..35978cf 100644 --- a/src/rrd_graph.c +++ b/src/rrd_graph.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2.19 Copyright by Tobi Oetiker, 1997-2007 + * RRDtool 1.2.23 Copyright by Tobi Oetiker, 1997-2007 **************************************************************************** * rrd__graph.c produce graphs from data in rrdfiles ****************************************************************************/ @@ -399,6 +399,13 @@ expand_range(image_desc_t *im) im->minval -= adj; im->maxval += adj; } + else if(im->extra_flags & ALTAUTOSCALE_MIN) { + /* measure the amplitude of the function. Make sure that + graph boundaries are slightly lower than min vals + so we can see amplitude on the graph */ + adj = (im->maxval - im->minval) * 0.1; + im->minval -= adj; + } else if(im->extra_flags & ALTAUTOSCALE_MAX) { /* measure the amplitude of the function. Make sure that graph boundaries are slightly higher than max vals @@ -490,7 +497,10 @@ apply_gridfit(image_desc_t *im) double new_range = factor * (im->maxval - im->minval); double gridstep = im->ygrid_scale.gridstep; double minor_y, minor_y_px, minor_y_px_frac; - im->maxval = im->minval + new_range; + if (im->maxval > 0.0) + im->maxval = im->minval + new_range; + else + im->minval = im->maxval - new_range; ytr(im,DNAN); /* reset precalc */ /* make sure first minor gridline is on integer pixel y coord */ minor_y = gridstep * floor(im->minval / gridstep); @@ -1663,8 +1673,8 @@ int draw_horizontal_grid(image_desc_t *im) for (i = sgrid; i <= egrid; i++){ double Y0=ytr(im,im->ygrid_scale.gridstep*i); double YN=ytr(im,im->ygrid_scale.gridstep*(i+1)); - if ( Y0 >= im->yorigin-im->ysize - && Y0 <= im->yorigin){ + if ( round(Y0) >= im->yorigin-im->ysize + && round(Y0) <= im->yorigin){ /* Make sure at least 2 grid labels are shown, even if it doesn't agree with the chosen settings. Add a label if required by settings, or if there is only one label so far and the next grid line is out of bounds. */ @@ -1827,7 +1837,7 @@ horizontal_log_grid(image_desc_t *im) pre_value = value; Y0 = ytr(im, value); - if(Y0 <= im->yorigin - im->ysize) break; + if(round(Y0) <= im->yorigin - im->ysize) break; /* major grid line */ gfx_new_dashed_line ( im->canvas, @@ -1887,7 +1897,7 @@ horizontal_log_grid(image_desc_t *im) if(value < im->minval) continue; Y0 = ytr(im, value); - if(Y0 <= im->yorigin - im->ysize) break; + if(round(Y0) <= im->yorigin - im->ysize) break; /* draw lines */ gfx_new_dashed_line ( im->canvas, @@ -1903,7 +1913,7 @@ horizontal_log_grid(image_desc_t *im) if(value < im->minval) continue; Y0 = ytr(im, value); - if(Y0 <= im->yorigin - im->ysize) break; + if(round(Y0) <= im->yorigin - im->ysize) break; /* draw lines */ gfx_new_dashed_line ( im->canvas, @@ -1944,7 +1954,7 @@ horizontal_log_grid(image_desc_t *im) if(value < im->minval) continue; Y0 = ytr(im, value); - if(Y0 <= im->yorigin - im->ysize) break; + if(round(Y0) <= im->yorigin - im->ysize) break; /* draw lines */ gfx_new_dashed_line ( im->canvas, @@ -1961,7 +1971,7 @@ horizontal_log_grid(image_desc_t *im) if(value < im->minval) continue; Y0 = ytr(im, value); - if(Y0 <= im->yorigin - im->ysize) break; + if(round(Y0) <= im->yorigin - im->ysize) break; /* draw lines */ gfx_new_dashed_line ( im->canvas, @@ -3223,6 +3233,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) {"no-minor", no_argument, 0, 'I'}, {"slope-mode", no_argument, 0, 'E'}, {"alt-autoscale", no_argument, 0, 'A'}, + {"alt-autoscale-min", no_argument, 0, 'J'}, {"alt-autoscale-max", no_argument, 0, 'M'}, {"no-gridfit", no_argument, 0, 'N'}, {"units-exponent",required_argument, 0, 'X'}, @@ -3255,6 +3266,9 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) break; case 'A': im->extra_flags |= ALTAUTOSCALE; + break; + case 'J': + im->extra_flags |= ALTAUTOSCALE_MIN; break; case 'M': im->extra_flags |= ALTAUTOSCALE_MAX;