[GRASS-user] legend scientific format
Hamish
hamish_b at yahoo.com
Tue Nov 15 19:17:29 EST 2011
Salvatore:
> > I want to generate a map legend with number in
> > scientific format. (I have number like 1.0E+14
> and in the legend appear like 100000000000000)…
MarkusN:
> Do you use d.legend?
>
> http://grass.osgeo.org/grass64/manuals/html64_user/d.legend.html
> "The text produced from floating-point raster maps will
> automatically create
> output with a meaningful number of significant digits. For
> very small values,
> numbers will be expressed in scientific notation, e.g.
> "1.7e-9".
> "
>
> Perhaps that should be likewise implemented for
> very large numbers, too?
It is based on the data's range.
for the morbidly curious,
/* determine how many significant digits to display based on range */
if (0 == (dmax - dmin)) /* trap divide by 0 for single value rasters */
sprintf(DispFormat, "%%f");
else {
SigDigits = (int)ceil(log10(fabs(25 / (dmax - dmin))));
if (SigDigits < 0)
SigDigits = 0;
if (SigDigits < 7)
sprintf(DispFormat, "%%.%df", SigDigits);
else
sprintf(DispFormat, "%%.2g"); /* eg 4.2e-9 */
}
The idea being that if the legend range is 1e6 to
-1e6 it just clutters the page to show so many
digits.
At the time I wrote that code I was using r.sun a
lot, so I'll go back and see what the old annual
solar irradiation plots were looking like, as those
numbers get pretty big too.
What threshold to use for the switchover to sci/eng
format? >=10million?
Hamish
More information about the grass-user
mailing list