[GRASS-user] Need for a custom color map

Thomas Adams wrote:

I'm wondering if someone has a color map that has white in the middle
range and blue at one extreme and red at the other. I'm creating a
precipitation difference map for data quality control purposes and I'm
trying to identify areas of over- and under-estimation by radar
estimates relative to gauge-only estimates. Such a scale would be
helpful to those looking for differences.

Glynn wrote:

The "differences" map (i.e. "r.colors ... color=differences") is:
  0% blue
  0 white
  100% red

This may be suitable, depending upon what you mean by "white in the
middle". The above has white at zero, which isn't necessarily the
middle. If you want white at the midpoint between the minimum and
maximum values, use:
  0% blue
  50% white
  100% red

If you want the table to be symmetrical, you'll need to specify
absolute values rather than percentages, e.g.:
  -10 blue
  0 white
  10 red

Doing a symmetrical absolute value color maps interests me, so I wrote a script to do it automatically based on r.univar results. It's called r.colors.stddev and it is now u on the wiki addons page. Read all about it & screenshots here:
  http://hamish.bowman.googlepages.com/grass_color_maps

I am not a statistician, so take my approach with a grain of salt and improvements are welcome. -- The book "How to lie with statistics" could easily have a second edition "How to lie with the human eye and color rules".

One problem that came up, the r.univar percentile= option only takes integer values. You can pass it a FP number but it just chops off everything after the decimal point. (I wanted the percentile values for 68.2689%, 95.4500%, 99.7300% of area under the curve, right now r.univar casts those to int so results are not exactly right) I have patched it locally (int->double, %d->%lf,%g), but it causes a few little problems:

1) cosmetic: there are rules for the 1st 2nd 3rd 4-9,0th percentile text.
It would need to be updated to use the least significant digit from %g.
Also that has i18n concerns...

2) the percentile shell script output would get a "." in it, which is invalid for an environment variable $name. It could be replaced with an underscore, ....?

3) It gives an answer, but is it an appropriate/meaningful thing to calculate?
(tiny doubt lingers)

enjoy,
Hamish

Hamish,

This is a really nice page. Thanks for sharing it.

Michael

On 10/20/07 9:31 PM, "Hamish" <hamish_nospam@yahoo.com> wrote:

Thomas Adams wrote:

I'm wondering if someone has a color map that has white in the middle
range and blue at one extreme and red at the other. I'm creating a
precipitation difference map for data quality control purposes and I'm
trying to identify areas of over- and under-estimation by radar
estimates relative to gauge-only estimates. Such a scale would be
helpful to those looking for differences.

Glynn wrote:

The "differences" map (i.e. "r.colors ... color=differences") is:
0% blue
0 white
100% red

This may be suitable, depending upon what you mean by "white in the
middle". The above has white at zero, which isn't necessarily the
middle. If you want white at the midpoint between the minimum and
maximum values, use:
0% blue
50% white
100% red

If you want the table to be symmetrical, you'll need to specify
absolute values rather than percentages, e.g.:
-10 blue
0 white
10 red

Doing a symmetrical absolute value color maps interests me, so I wrote a
script to do it automatically based on r.univar results. It's called
r.colors.stddev and it is now u on the wiki addons page. Read all about it &
screenshots here:
  http://hamish.bowman.googlepages.com/grass_color_maps

I am not a statistician, so take my approach with a grain of salt and
improvements are welcome. -- The book "How to lie with statistics" could
easily have a second edition "How to lie with the human eye and color rules".

One problem that came up, the r.univar percentile= option only takes integer
values. You can pass it a FP number but it just chops off everything after the
decimal point. (I wanted the percentile values for 68.2689%, 95.4500%,
99.7300% of area under the curve, right now r.univar casts those to int so
results are not exactly right) I have patched it locally (int->double,
%d->%lf,%g), but it causes a few little problems:

1) cosmetic: there are rules for the 1st 2nd 3rd 4-9,0th percentile text.
It would need to be updated to use the least significant digit from %g.
Also that has i18n concerns...

2) the percentile shell script output would get a "." in it, which is invalid
for an environment variable $name. It could be replaced with an underscore,
....?

3) It gives an answer, but is it an appropriate/meaningful thing to calculate?
(tiny doubt lingers)

enjoy,
Hamish

__________________________________________
Michael Barton, Professor of Anthropology
Director of Graduate Studies
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton