Talk:Color tables

From GRASS-Wiki
Jump to: navigation, search

Script to generate the images on this page:
by H.Bowman (GRASS wiki license)

#!/bin/sh

# customize this:
ADDON_DIR="/path/to/grass/svn/grass-addons/raster/r.colors.tools/palettes"

g.region n=100 s=0 w=0 e=450 res=1

d.mon x0
d.resize h=100 w=450

COLOR_DIR="$GISBASE/etc/colors/"
cd "$COLOR_DIR"
RELATIVE=`grep '%' * | cut -f1 -d: | grep -v "matches" | uniq`
ABSOLUTE=`grep -v '%' * | cut -f1 -d: | grep -v "matches" | uniq`
MIXED=`grep '%' $ABSOLUTE | cut -f1 -d: | grep -v "matches" | uniq`

GRASS_OVERWRITE=1
export GRASS_OVERWRITE

OUTPUT_DIR=/tmp/grass/colortables/
rm -rf $OUTPUT_DIR
mkdir -p $OUTPUT_DIR 
cd $OUTPUT_DIR


draw_and_output()
{
  d.erase
  d.font Vera

  d.legend grad -c at=55,90,4,96 --quiet

  echo "$1" | d.text at=50,22 align=lc size=20 color=black

  d.out.file Colortable_$1 --quiet --overwrite
}

### relative scales.  run first so tables like differences with both
###  will overwrite
r.mapcalc "grad = row()/1.0"

for CTABLE in $RELATIVE ; do
  echo "[$CTABLE]"

  r.colors grad color=$CTABLE --quiet
  draw_and_output $CTABLE

  #read
done


### absolute scales.
for CTABLE in $ABSOLUTE ; do
  MIN=`awk '{print $1}' "$COLOR_DIR/$CTABLE" | sort -n | grep -v '^#\|^nv' |  head -n 1`
  MAX=`awk '{print $1}' "$COLOR_DIR/$CTABLE" | sort -n | grep -v '^#\|^nv' |  tail -n 1`

  if [ `echo "$MIN" | grep -c '%'` -gt 0 ] || \
     [ `echo "$MAX" | grep -c '%'` -gt 0 ] ; then
       continue
  fi

  if [ $CTABLE = "population" ] ; then
    MAX=2500000
  fi

  echo "[$CTABLE $MIN $MAX]"

  GRASS_VERBOSE=0 \
    r.mapcalc "grad = if(row()==1, 1.0 * $MIN, $MAX)"

  r.colors grad color=$CTABLE --quiet
  draw_and_output $CTABLE

done


### mixed scales
for CTABLE in $MIXED ; do
  MIN=-0.04
  MAX=0.04

  GRASS_VERBOSE=0 \
    r.mapcalc "grad = if(row()==1, 1.0 * $MIN, $MAX)"

  r.colors grad color=$CTABLE --quiet
  draw_and_output $CTABLE

done



### custom scales
for CTABLE in `ls $ADDON_DIR` ; do
  MIN=`awk '{print $1}' "$ADDON_DIR/$CTABLE" | sort -n | grep -v '^#\|^nv' | head -n 1`
  MAX=`awk '{print $1}' "$ADDON_DIR/$CTABLE" | sort -n | grep -v '^#\|^nv' | tail -n 1`
  echo "[$CTABLE $MIN $MAX]"

  GRASS_VERBOSE=0 \
    r.mapcalc "grad = if(row()==1, 1.0 * $MIN, $MAX)"

  r.colors grad rules="$ADDON_DIR/$CTABLE" --quiet
  draw_and_output $CTABLE

done

echo "Files written to <$OUTPUT_DIR>"


Script to generate mini-thumbnail versions:
by H.Bowman (GRASS wiki license) Requires GRASS 6.5+ newer than Sept. 2009.

#!/bin/sh

# customize this:
ADDON_DIR="/path/to/grass/svn/grass-addons/raster/r.colors.tools/palettes"

g.region n=85 s=0 w=0 e=15 res=1

d.mon x0
d.resize h=85 w=15
 
COLOR_DIR="$GISBASE/etc/colors/"
cd "$COLOR_DIR"

RELATIVE=`grep '%' * | cut -f1 -d: | grep -v "matches" | uniq`
ABSOLUTE=`grep -v '%' * | cut -f1 -d: | grep -v "matches" | uniq`
MIXED=`grep '%' $ABSOLUTE | cut -f1 -d: | grep -v "matches" | uniq`

GRASS_OVERWRITE=1
export GRASS_OVERWRITE

OUTPUT_DIR=/tmp/grass/colortables/
rm -rf $OUTPUT_DIR
mkdir -p $OUTPUT_DIR 
cd $OUTPUT_DIR

draw_and_output()
{
  d.erase
  d.colortable -n grad
  d.out.file Colortable_$1 --quiet --overwrite
  convert -rotate 90 Colortable_$1.png Colortable_$1.png
}

### relative scales.  run first so tables like differences with both
###  will overwrite
g.region -d res=600 -a
r.mapcalc "grad = row()/1.0"
 
for CTABLE in $RELATIVE ; do
  echo "[$CTABLE]"
 
  r.colors grad color=$CTABLE --quiet
  draw_and_output $CTABLE
 
  #read
done
 
 
### absolute scales.
for CTABLE in $ABSOLUTE ; do
  MIN=`awk '{print $1}' "$COLOR_DIR/$CTABLE" | sort -n | grep -v '^#\|^nv' |  head -n 1`
  MAX=`awk '{print $1}' "$COLOR_DIR/$CTABLE" | sort -n | grep -v '^#\|^nv' |  tail -n 1`
 
  if [ `echo "$MIN" | grep -c '%'` -gt 0 ] || \
     [ `echo "$MAX" | grep -c '%'` -gt 0 ] ; then
       continue
  fi
 
  if [ $CTABLE = "population" ] ; then
    MAX=2500000
  fi
 
  echo "[$CTABLE $MIN $MAX]"
 
  GRASS_VERBOSE=0 \
    r.mapcalc "grad = if(row()==1, 1.0 * $MIN, $MAX)"
 
  r.colors grad color=$CTABLE --quiet
  draw_and_output $CTABLE
 
done
 
 
### mixed scales
for CTABLE in $MIXED ; do
  MIN=-0.04
  MAX=0.04
 
  GRASS_VERBOSE=0 \
    r.mapcalc "grad = if(row()==1, 1.0 * $MIN, $MAX)"
 
  r.colors grad color=$CTABLE --quiet
  draw_and_output $CTABLE
 
done
 
 
 
### custom scales
for CTABLE in `ls $ADDON_DIR` ; do
  MIN=`awk '{print $1}' "$ADDON_DIR/$CTABLE" | sort -n | grep -v '^#\|^nv' | head -n 1`
  MAX=`awk '{print $1}' "$ADDON_DIR/$CTABLE" | sort -n | grep -v '^#\|^nv' | tail -n 1`
  echo "[$CTABLE $MIN $MAX]"
 
  GRASS_VERBOSE=0 \
    r.mapcalc "grad = if(row()==1, 1.0 * $MIN, $MAX)"
 
  r.colors grad rules="$ADDON_DIR/$CTABLE" --quiet
  draw_and_output $CTABLE
 
done

echo "Files written to <$OUTPUT_DIR>"