Print eps figure with accent in matlab

Matlab is a powerfull software to plot images in different styles and formats. For this reason, researchers use it to make graphics to their papers. The eps format is one of the best to present it in papers or presentations. We usually add text in the image as the axis labels, titles or texts in certain positions. It can be done in image with arbitrary axis or in maps with latitude and longitude axis.

However, there are problems at exporting images as .eps format when we use accent in any kind of text that was put in the image. So, here I present a way to export eps format images using LaTex option directly in matlab.

% clear all before starting
clc, clear all, close all;
% load coast and map parameters
load coast;
subplot(1,2,1)
axesm('MapProjection','pcarree',...
'FLineWidth',2.5,...
'Frame','on',...
'MLineLocation',5,...
'PLineLocation',5,...
'Grid','on',...
'MapLatLimit',[-21 -1],...
'MapLonLimit',[-88 -69],...
'MeridianLabel','on', ...
'ParallelLabel','on',...
'GAltitude',5,...
'MLabelParallel','south');plotm(lat,long)
% plot the world coastlines in regions
patchesm(lat,long,[.7 .8 .7]);
tightmap;
% add ocean color
setm(gca,'ffacecolor',[114 172 230]/255)
% add some text in latex format
textm(-9.5,-76.5,'PERÚ','FontSize',16,'fontWeight','bold')
textm(-12.2,-81.5,'OCÉANO','FontSize',10,'fontWeight','bold')
textm(-13.2,-81.5,'PACÍFICO','FontSize',10,'fontWeight','bold')
% add title if wished
title('LÍNEA COSTERA DE PERÚ','FontSize',14)
subplot(1,2,2)
axesm('MapProjection','pcarree',...
'FLineWidth',2.5,...
'Frame','on',...
'MLineLocation',5,...
'PLineLocation',5,...
'Grid','on',...
'MapLatLimit',[-21 -1],...
'MapLonLimit',[-88 -69],...
'MeridianLabel','on', ...
'ParallelLabel','on',...
'GAltitude',5,...
'MLabelParallel','south');plotm(lat,long)
% plot the world coastlines in regions
patchesm(lat,long,[.7 .8 .7]);
tightmap;
% add ocean color
setm(gca,'ffacecolor',[114 172 230]/255)
% add some text in latex format
textm(-9.5,-76.5,'PER\''{U}','FontSize',16,'fontWeight','bold','interpreter','LaTex')
textm(-12.2,-81.5,'OC\''{E}ANO','FontSize',10,'fontWeight','bold','interpreter','LaTex')
textm(-13.2,-81.5,'PAC\''{I}FICO','FontSize',10,'fontWeight','bold','interpreter','LaTex')
% add title if wished
title('L\''INEA COSTERA DE PER\''U','FontSize',14,'interpreter','LaTex')

% export the figure in eps format
print -depsc prueba

Coastline of Peru

Left image was made without using latex interpreter and right image was developed with the option LaTex interpreter. As you can see, the principal key is to add the option (‘interpreter’,’Latex’) to text functions as title(),xlabel(),ylabel(),text(),textm(),and others. The image above is not the real resolution printed with matlab becouse I had to convert it to .png format in order to upload it to this post.

Mapas en R con RgoogleMaps

Los mapas con el paquete RgoogleMaps se obtienen descargando los mapas desde Google Maps valga la redundancia-, lo bueno es la interface gráfica con que se pueden presentar los mapas incluyendo las calles, centros de atracción, etc. Además la sintaxis para obtener el mapa es sencilla y pueden agregar objetos en la ubicación deseada según su latitud y longitud. El mapa obtenido seria de la siguiente manera:

El código en R se muestra a continuación:

#install.packages("rgdal")
#install.packages("geomapdata")
#install.packages("sp")
install.packages("RgoogleMaps")
library("RgoogleMaps")

#Lima
# GetMap es para descargar el mapa y PlotOnStaticMap es para mostrar el mapa
#El Zoom va de 0 a 19
#Para ver latitud y longitud de Lima http://www.tutiempo.net/Tierra/Peru/Lima-PE035311.html
PlotOnStaticMap(GetMap(center=c(-12.05,-77.05), zoom =13, destfile = "Lima.png",
       maptype = "mobile"), axes = TRUE)
# si desean una imagen satelital
PlotOnStaticMap(GetMap(center=c(-12.05,-77.05), zoom =13, destfile = "Limasatelital.png",
       maptype = "satellite"), axes = TRUE)

# Para agregar texto al mapa puede hacer lo siguiente:
#Leer mapa
MyMap=GetMap(center=c(-12.02,-77.05), zoom =13, destfile = "LimaUNI.png",
       maptype = "mobile")
#Agregar texto al mapa
png(file="Mapa%02d.png", width=1000, height=1000)
TextOnStaticMap(MyMap, lat=c(-12.02+0.02*runif(1),-12.02+0.02*runif(1)),lon=c(-77.05+0.02*runif(1),-77.05+0.02*runif(1)), c("Ingeniería","Estadística"), cex=2, col = 'red')
dev.off()

Mapas en el paquete de “Métodos para datos espaciales” (sp) en R

Para trabajar con este paquete podemos descargar la información georeferenciada de http://gadm.org/ de cualquier país, lo malo es que a mayor nivel de detalle tal como distritos existen discrepancias con la realidad. De todas maneras este paquete resulta interesante y útil a la hora de trabajar con datos georeferenciados y mucho más si son datos propios. A continuación se muestra un código para obtener el mapa de Lima por provincias directo desde el Software R.

library(sp)
peru <- readRDS("PER_adm2.rds")
# Para descargar el mapa http://gadm.org/country
# En la misma página también se puede descargar para departamentos y provincias
# solo se cambia PER_adm2.RData por PER_adm0.RData,PER_adm1.RData o PER_adm3.RData
names(peru)
# Hasta ahora el mapa y sus características están cargados en gadm por provincias
mapalima <- peru[peru@data$NAME_1 == "Lima",] # Seleccionamos las provincias de lima (polígonos y datos) Aquí tu indicaste otros números pero la data ha cambiado y esos son los actuales que tienen las provincias de lima.
datalima <- data.frame(mapalima) # Seleccionamos solo los datos de la provincias
# Los nombres de las provincias pueden ser obtenidas de 2 maneras:
datalima[7];mapalima$NAME_2;
#creamos el factor según los nombres de las provincias elegidas
mapalima$provincias <- factor(mapalima$NAME_2)
#la función factor es para eliminar los niveles que no existen
col <- rainbow(length(levels(mapalima$provincias ))) # asignamos los colores según los niveles
# mostramos el mapa
spplot(mapalima, "provincias", col.regions = col, main = "Lima Provincias")
# Además lo siguiente es por si se desea el mapa con texto (puede ser en vectores)
d1 <- list("sp.text",c(-75.99853,-11.),"Estadística")
spplot(
  mapalima, "provincias", col.regions = col, main = "Lima Provincias",sp.layout =
    list(d1)
)

El resultado del mapa es el siguiente (Por supuesto que puede ser mejorado según sus intereses):

Hecho en R con el paquete sp

Por otro lado, también se muestra ,a continuación, el código para obtener los distritos del departamento de Lima:

library(sp)
#descargamos los datos por distritos
gadm <- readRDS("PER_adm3.rds")

names(gadm)
# elegimos solo los distritos de lima
mapalima <- gadm[(gadm@data$NAME_2  == "Lima") |
                  gadm@data$NAME_3  == "Callao" | gadm@data$NAME_3  == "Ventanilla",]
dataprovlima <- data.frame(mapalima)
limageo <- mapalima[1]

distritos <- factor(mapalima$NAME_3) #la función factor es para eliminar los niveles que no existen
mapalima$distritos <- distritos# asignamos el factor

col <- rainbow(length(levels(mapalima$distritos))) # asignamos los colores según los niveles
# mostramos el mapa

spplot(mapalima, "distritos", col.regions = col, main = "Distritos del Departamento de Lima")

Espero que les sea útil =).