The old "1e+nn" labels were really annoying me to no end, so, as goaded by
one mailing list post on rrd-users
(http://www.ee.ethz.ch/~slist/rrd-users/msg02951.html), I patched
rrd_graph.c myself. It's not entirely thorough, but certainly does the job
well here for use with MRTG traffic graphs. Adapt and apply as you see fit.
Applies to 1.0.39.

Now you get:

old     new
1e+00   1
1e+01   10
1e+02   100
1e+03   1 k
1e+04   10 k
1e+05   100 k
1e+06   1 M
1e+07   10 M
1e+08   100 M
1e+09   1 G
1e+10   10 G
1e+11   100 G
1e+12   1 T
1e+13   10 T
1e+14   100 T
1e+15   1 P
1e+16   10 P
1e+17   100 P
1e+18   1 E
1e+19   10 E
1e+20   100 E
1e+21   1000 E 
1e+22   10000 E
1e+23   100000 E
1e+24   1000000 E
...


Regards,
Ian Morgan
-- 
-------------------------------------------------------------------
 Ian E. Morgan        Vice President & C.O.O.         Webcon, Inc.
 [EMAIL PROTECTED]          PGP: #2DA40D07           www.webcon.ca
    *  Customized Linux network solutions for your business  *
-------------------------------------------------------------------


--- src/rrd_graph.c.orig        Wed Aug  7 02:50:53 2002
+++ src/rrd_graph.c     Wed Aug  7 04:33:24 2002
@@ -1970,6 +1970,8 @@
     gdPoint  polyPoints[4];
     int      styleMinor[2],styleMajor[2];
     double   value, pixperstep, minstep;
+    double   tvalue;
+    char     tvalsymbol;
 
     /* find grid spaceing */
     pixpex= (double)im->ysize / (log10(im->maxval) - log10(im->minval));
@@ -2038,7 +2040,37 @@
            
            gdImageLine(gif, polyPoints[0].x,polyPoints[0].y,
                        polyPoints[1].x,polyPoints[0].y,gdStyled);
-           sprintf(graph_label,"%3.0e",value * yloglab[majoridx][i]);
+
+           /* Make log scale labels sane using SI units */
+           tvalue = value * yloglab[majoridx][i];
+           tvalsymbol='x';
+           if (tvalue >= 1e18) {
+             tvalsymbol = 'E';
+             tvalue /= 1e18;
+           } else if (tvalue >= 1e15) {
+             tvalsymbol = 'P';
+             tvalue /= 1e15;
+           } else if (tvalue >= 1e12) {
+             tvalsymbol = 'T';
+             tvalue /= 1e12;
+           } else if (tvalue >= 1e9) {
+             tvalsymbol = 'G';
+             tvalue /= 1e9;
+           } else if (tvalue >= 1e6) {
+             tvalsymbol = 'M';
+             tvalue /= 1e6;
+           } else if (tvalue >= 1e3) {
+             tvalsymbol = 'k';
+             tvalue /= 1e3;
+           }
+           
+           /* sprintf(graph_label,"%3.0e",tvalue); */
+           if ( tvalsymbol == 'x' ) {
+             sprintf(graph_label, "%.0f", tvalue);
+           } else {
+             sprintf(graph_label, "%.0f %c", tvalue, tvalsymbol);
+           }
+
            gdImageString(gif, SmallFont,
                          (polyPoints[0].x - (strlen(graph_label) * 
                                              SmallFont->w)-7), 

--
Unsubscribe mailto:[EMAIL PROTECTED]
Help        mailto:[EMAIL PROTECTED]
Archive     http://www.ee.ethz.ch/~slist/rrd-developers
WebAdmin    http://www.ee.ethz.ch/~slist/lsg2.cgi

Reply via email to