back
9.0 símbolos y texto: psxy y
pstextSe usa
psxy para graficar símbolos en un mapa de 2D, y
pstext para insertar texto.
Los
ejemplos abajo son para graficar símbolos sobre un mapa que ya fue
creado, tal que las líneas de código dadas acá no son scripts enteros,
hay que agregarlas al script ya creado en la clase 8. Note que
cuándo se pone más código en uno de estos scripts, hay que
verificar las opciónes -K y -O dentro de los comandos:
• -K significa que más
postscript sera agregado al .ps más tarde, o si no se termina el .ps. Entonces -K debe estar en todos los comandos usados salvo el último.
•
-O significa que lo que grafica el comando va sobre el .ps ya creado.
Si no, un nuevo gráfico sera creado. Entonces -O debe ser en todos los
comandos usados salvo el primero.
9.1 agregando un símbolo a un mapaSi quiero poner un símbolo a un mapa, uso
psxy.
Por ejemplo, para poner un símbolo que identifique la ciudad de Concepción en un
mapa, puedo poner esta línea de código al final del script
ejemplo_mapa3.sh.
echo -73.03 -36.83 | psxy -J${projection} -R${bounds} ${verbose} -Ss1.0c -W0.2c/255/0/200 -G255/175/0 -O >> ${psfile}
Esto
toma un punto de longitud y latitud (en nuestro caso la UdeC) y lo
grafica como un cuadrado de 1.0 centímetro de tamaño (-Ss1.0c), de un
color naranjo (-G255/175/0), con bordes de 0.2 centímetros de ancho , y de color
púrpura (-W0.2c/255/0/0).
Hay
varios símbolos disponibles, por
ejemplo círculo (-Sc), cruz (-Sx), rombo (-Sd), hexágono (-Sh),
estrella (-Sa), triángulo (-St), triángulo invertido (-Si) entre otros.
Juege con uno de ellos, y también pruebe modificar los colores y el
borde para que se vea en otra.
9.2 agregando textoPara poner texto a un gráfico, por ejemplo, para poner "Concepción" al lado del símbolo de la ciudad, usamos
pstext.
echo "-72.8 -36.83 12 0 4 LM Concepci\363n" | pstext
-J${projection} -R${bounds} ${verbose} -G0 -N -W255 -O >>
${psfile}
Esto requiere un poco de explicación:
• La longitud y latitud dónde se requiere empezar el texto están dadas por -72.8 -36.83
• El 12
significa el tamaño de las letras
• El 0
es el ángulo del texto (en nuestro caso, horizontal)
• El 4
es el font Times-Roman. Para una lísta de los fonts disponibles, escribe pstext -L
en un terminal
• El LM
significa que el punto donde queremos el text (dado por -72.8 -36.83)
esta al lado izquierdo (L), al medio (M), del bloque de texto. Las
opciones estan left/centre/right (LCR) y bottom/middle/top (BMT).
Por ejemplo, los tres puntos en el gráfico representan LB, CT, RM.
• Para poner carácteres especiales, hay que usar un código octal: CODIGOS OCTALES EN GMT
El default es ISOLatin+, así que \363 representa la letra "ó", \341 representa la letra "á", etc.
• -G0 significa que el color del texto es negro
• -W255 pone un rectángulo de color blanco bajo el texto
•
-N significa que el texto puede existir fuera de los bordes del gráfico
(si no, va a estar cortado por el borde - revisa eso cambiando la
posición del texto.)
9.3 Agregando líneas
Usamos
psxy de nuevo para poner líneas entre dos (o más) puntos. -W selecciona el
ancho (aquí 2.0 puntos) de la linea y su color, -A significa que la
línea es recta, y no un arco de un gran círculo entre los puntos. El
ejemplo abajo va a dibujar una línea negra debajo del texto en la sección
9.2.
psxy -J${projection} -R${bounds} ${verbose} -W2.0p/0/0/0 -A -O << END >> ${psfile}
-72.8 -36.9
-72.3 -36.9
END
También
podemos tener un archivo con los puntos donde queremos nuestra línea y
graficar eso con psxy. Por ejemplo, el archivo biobio_region.xy contiene la información sobre las fronteras de la región del Bío Bío. Podemos graficarlo con
psxy biobio_region.xy -J${projection} -R${bounds} ${verbose} -m -W1.0p/0/0/0t5_2:2 -A -O >> ${psfile}
Note
que el archivo biobio_region.xy expresa dos líneas, una para la
frontera al norte, después una pausa de 1 línea, después la frontera
del sur. Por eso uso la opción -m
para un "multiple segment file", o un archivo de multiples segmentos. Note también que esta línea tiene textura (t5_2:2
).
Eso significa que tenemos una línea con 5 puntos de segmento y 2 puntos
de espacio, con un desplazamiento de 2 puntos de su inicio. (Esto es
difícil de explicar, mejor prueben diferentes combinaciones, como
t5_2:0, t2_5:2, e incluso t2_2_8_2:1). Para más información, lean la
página SPECIFYING PEN ATTRIBUTES
9.4 Agregando vectores
Para poner un vector al gráfico, uso
echo "-73.9 -36.5 80 2" | psxy -J${projection} -R${bounds} ${verbose} -SV0.075c/0.3c/0.15c -G0 -O >> ${psfile}
Los
números son la longitud y latitud del vector, el azimut del vector, y
su largo en centímetros. Aquí estoy usando psxy con la opción -SV para
un vector. Los números asociados con el -SV son el ancho del vector
(0.075 centímetros), el ancho de la flecha (0.3 centímetros), y el
largo de la flecha (0.15 centímetros). Prueben eso con diferentes
valores. La opción -G da el color del vector, en nuestro caso, negro.
Esta flecha representa la velocidad de la placa Nazca, podemos agregar texto a su lado para especificar eso:
echo "-73.9 -36.6 12 0 6 LM Nazca Plate" | pstext -J${projection} -R${bounds} $verbose} -G0 -N -W255 -O -K >> ${psfile}
echo "-73.9 -36.69 12 0 6 LM ~80 mm/yr" | pstext -J${projection} -R${bounds} ${verbose} -G0 -N -W255 -O >> ${psfile}
9.5 El script
El script que hace eso esta disponible aquí: ejemplo_mapa4.sh.
Note que este script también tiene una opción para el color de los
lagos. Es posible limpiar el script con condicionales, como lo que se hizo con la topografía.
El script debe producir un gráfico como este :
Aquí esta el script en full:
#!/bin/bash
topo_option=1
illumination_option=1
contour_option=0
topo_scale_option=1
####################################################################################################
region="ejemplo_mapa4"
bounds="-74.5/-71/-38.5/-36"
#origin:
xshift="2.0"
yshift="6.0"
projection="M14.0" #projection
palette="/home/matt/GMT/GMT4.5.2/share/cpt/GMT_globe.cpt" # colour palette
topography="/home/matt/GMT/TOPO_FILES/SRTM30/w100s10.Bathymetry.srtm.grd" #topography file
ticks="a2f0.5g1SEWN"
illaz="225" # illumination azimuth
portrait="-P" # set this to be blank for the default landscape mode
verbose="-V" # set this to be blank to suppress output to stderr
# coastline and border information --- see pscoast manpage for details
coastline="1.00p/0/0/0"
resolution="f" # choose from (f)ull, (h)igh, (i)ntermediate,
# (l)ow, and (c)rude
borders="-N1/1.00p/0/0/0"
#rivers="-I1/1.00p/0/0/255"
wet="-S0/0/255"
land="-G0/255/0"
lakes="-C50/100/200 -A0/2/4"
########################################################################################################
# output file
psfile="${region}.ps"
# make a basemap (blank b/g), insert grid image and plot coastlines
psbasemap -B${ticks} -J${projection} -R${bounds} -X${xshift} -Y${yshift} ${portrait} ${verbose} -K > ${psfile}
if [ "${topo_option}" = 1 ]; then
#grdcut input_file.grd −Goutput_file.grd −Rwest/east/south/north[r] [ −V ] [ −f[i|o]colinfo ]
#cuts the grid to the specific region
grdcut ${topography} -G${region}.grd -R${bounds} -V
if [ "${illumination_option}" = 1 ]; then
# illuminate the grid file from specified azimuth to produce an
# intensity (.int) file
grdgradient ${region}.grd -G${region}.int -A${illaz} -Nt -M
# insert topography
grdimage ${region}.grd -C${palette} -I${region}.int -B${ticks}
-J${projection} -R${bounds} ${portrait} ${verbose} -O -K >>
${psfile}
else
grdimage ${region}.grd -C${palette} -B${ticks} -J${projection}
-R${bounds} ${portrait} ${verbose} -O -K >> ${psfile}
fi
if [ "${contour_option}" = 1 ]; then
grdcontour ${region}.grd -B${ticks} -J${projection} -C200 -A1000+k0/0/0
-R${bounds} ${portrait} ${verbose} -W0.1p/0/0/0 -Gd10c -O -K >>
${psfile}
fi
if [ "${topo_scale_option}" = 1 ]; then
psscale -D16c/2.5c/5c/0.5c -C${palette} -Ba5000f1000/a5000f1000:"(m)": -O -K >> ${psfile}
fi
pscoast
-B${ticks} -J${projection} -R${bounds} ${portrait} ${verbose}
-D${resolution} -W${coastline} ${borders} ${rivers} -O -K
>> ${psfile}
pscoast
-B${ticks} -J${projection} -R${bounds} ${portrait} ${verbose} ${lakes}
-D${resolution} -W${coastline} ${borders} ${rivers} -O -K
>> ${psfile}
else
pscoast
-B${ticks} -J${projection} -R${bounds} ${portrait} ${verbose}
-D${resolution} -W${coastline} ${borders} ${rivers} ${wet} ${land} -O
-K >> ${psfile}
pscoast
-B${ticks} -J${projection} -R${bounds} ${portrait} ${verbose} ${lakes}
-D${resolution} -W${coastline} ${borders} ${rivers} -O -K >>
${psfile}
fi
#############################################################################################
#ahora vamos a poner unos simbolos
#poner una cuadra para la ciudad de concepcion
echo "-73.03 -36.83" | psxy -J${projection} -R${bounds} ${verbose} -Ss1.0c -W0.2c/255/0/200 -G255/175/0 -O -K >> ${psfile}
#poner texto que dice concepcion
echo
"-72.8 -36.83 12 0 4 LM Concepci\363n" | pstext -J${projection}
-R${bounds} ${verbose} -G0 -N -W255 -O -K >> ${psfile}
#poner una línea bajo del texto
psxy -J${projection} -R${bounds} ${verbose} -W2.00p/0/0/0 -A -O -K << END >> ${psfile}
-72.8 -36.9
-72.3 -36.9
END
#poner la frontera de la region biobio
psxy biobio_region.xy -J${projection} -R${bounds} ${verbose} -m -W1.0p/0/0/0t5_2:1 -A -O -K >> ${psfile}
#poner un vector para la velocidad de la placa Nazca
echo "-73.9 -36.5 80 2" | psxy -J${projection} -R${bounds} ${verbose} -SV0.075c/0.3c/0.15c -G0 -O -K >> ${psfile}
#y texto
echo "-73.9 -36.6 12 0 6 LM Nazca Plate" | pstext -J${projection} -R${bounds} $verbose} -G0 -N -W255 -O -K >> ${psfile}
echo "-73.9 -36.69 12 0 6 LM ~80 mm/yr" | pstext -J${projection} -R${bounds} ${verbose} -G0 -N -W255 -O >> ${psfile}
Próxima semana: volcanes, terremotos, mecanismos focales, áreas, indent maps
back