(31) Using non-default fonts in PostScript

This example illustrates several possibilities to create GMT plots with non-default fonts. As these fonts are not part of the standard PostScript font collection they have to be embedded in the PS- or PDF-file with Ghostscript. See also Cookbook Section Using non-default fonts with GMT for further information. The script includes the following steps:

The script produces the plot in Figure. All standard fonts have been substituted by the free OpenType fonts Linux Libertine (title) and Linux Biolinum (annotations). Remote files with the locations and names of the cities are used, with awk providing help in data preparation.

#!/usr/bin/env bash
#		GMT EXAMPLE 31
#
# Purpose:	Illustrate usage of non-default fonts in PostScript
# GMT modules:	set, coast, plot, text, legend
# Unix progs:	awk, cat, rm
#

# set AWK to awk if undefined
AWK=${AWK:-awk}

gmt begin ex31
	# Set FONTPATH used in image conversion
	# $(dirname 0) is the path to the current bash script
	gmt set PS_CONVERT="C-sFONTPATH=$(dirname $0)/fonts"

	# create file PSL_custom_fonts.txt in current working directory
	# and add PostScript font names of Linux Biolinum and Libertine
	$AWK '{print $1, 0.700, 0}' <<- EOF > PSL_custom_fonts.txt
	LinBiolinumO
	LinBiolinumOI
	LinBiolinumOB
	LinLibertineOB
	EOF

	capitals=$(gmt which -G @europe-capitals-ru.csv)
	# common settings
	gmt set FORMAT_GEO_MAP ddd:mm:ssF MAP_DEGREE_SYMBOL colon MAP_TITLE_OFFSET 20p \
		MAP_GRID_CROSS_SIZE_PRIMARY 0.4c PS_LINE_JOIN round PS_CHAR_ENCODING ISO-8859-5 \
		FONT LinBiolinumO FONT_TITLE 24p,LinLibertineOB MAP_ANNOT_OBLIQUE lon_horizontal,lat_parallel,tick_extend

	# map of countries
	gmt coast -R-7/31/64/66+r -JL15/50/40/60/16c -Bx10g10 -By5g5 -B+t"Europe\072 Countries and Capital Cities" -A250 \
		-Slightblue -Glightgreen -W0.25p -N1/1p,white
	# mark capitals
	gmt plot @europe-capitals-ru.csv -i0,1 -Sc0.15c -G196/80/80
	# small EU cities
	$AWK 'BEGIN {FS=","} $4 !="" && $4 <= 1000000 {print $1, $2}' $capitals | gmt plot -Sc0.15c -W0.25p
	# big EU cities
	$AWK 'BEGIN {FS=","} $4 > 1000000 {print $1, $2}' $capitals | gmt plot -Sc0.15c -W1.25p
	# label big EU cities
	$AWK 'BEGIN {FS=","} $4 > 1000000 {print $1, $2, $3}' $capitals | gmt text -F+f7p,LinBiolinumOI+jBL -Dj0.1c -Gwhite -C5%+tO -Qu

	# construct legend
	cat <<- EOF > legend.txt
	G -0.1c
	H 10p,LinBiolinumOB Population of the European Union capital cities
	G 0.15c
	N 2
	S 0.15c c 0.15c 196/80/80 0.25p 0.5c < 1 Million inhabitants
	S 0.15c c 0.15c 196/80/80 1.25p 0.5c > 1 Million inhabitants
	N 1
	G 0.15c
	L 8p,LinBiolinumOB L Population in Millions
	N 6
	EOF

	# append city names and population to legend
	$AWK 'BEGIN {FS=","; f="L 8p,LinBiolinumO L"}
	  $4 > 1000000 {printf "%s %s:\n%s %.2f\n", f, $3, f, $4/1e6}' $capitals >> legend.txt

	# reduce annotation font size for legend
	gmt set FONT_ANNOT_PRIMARY 8p

	# plot legend
	gmt legend -DjTR+o0.1c+w8.0c+l1.2 -C0.3c/0.4c -F+p+gwhite legend.txt

	rm -f legend.txt ex31CropNoLogo.eps europe-capitals-ru.csv
gmt end show
rm -f PSL_custom_fonts.txt
Copy to clipboard
../_images/ex31.png

Using non-default fonts in PostScript.