2012-05-13 25 views
5

Tengo un problema similar al @Mike en this question. La pregunta es cómo establecer los colores de contorno de las regiones en un diagrama de mapa.fronteras geom_map en ggplot2 - revisited

La solución propuesta es agregar un geom_polygon para trazar los bordes. Esto funciona, siempre que se trace todo el área. Al intentar tratar de restringir a un subárea, los polígonos se dibujan de manera extraña (presumiblemente porque algunos vértices se caen). Utilizando el estándar geom_map ejemplo:

# Create example data 
ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) 
values <- data.frame(id = ids, value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5)) 
positions <- data.frame(
    id = rep(ids, each = 4), 
    x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), 
    y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) 
) 

# Plot data 
ggplot(values, aes(fill = value)) + 
    geom_map(aes(map_id = id), map = positions) + 
    geom_polygon(aes(x,y,group=id), fill = NA, colour = 'red', data = positions) + 
    expand_limits(positions) + 
    ylim(0, 3) 

Una posible solución está utilizando la estética de color en geom_map y luego elegir manualmente el color del contorno con scale_colour_manual, de la siguiente manera:

ggplot(values, aes(fill = value)) + 
    geom_map(aes(map_id = id, colour = 'white'), map = positions) + 
    scale_colour_manual(values=c('white')) + 
    expand_limits(positions) + 
    ylim(0, 3) 

así que tengo dos preguntas:

  1. ¿Por qué geom_polygon no funciona correctamente cuando los límites del eje están restringidos?
  2. ¿Hay una solución más elegante para colorear los contornos que la que se muestra aquí?

A continuación se muestran las salidas de trazado. Muchas gracias de antemano.

Did not work properly using geom_polygon Works but is not very elegant

Respuesta

8

creo que tienes razón en cuanto a porqué no funciona. Al restringir los límites xey con xlim o ylim, se recortan los datos antes del trazado. Esto terminará omitiendo algunos vértices de su polígono, por lo que algunas cosas no se trazarán.

Esto es por qué hay coord_cartesian, lo que le permite ajustar el X y Y límites y sin recorte de los datos. Se "acercará" a la región correcta, en lugar de recortar y luego trazar.

Por lo tanto, en lugar de ylim, intente + coord_cartesian(ylim = c(0,3)).

+0

esto funciona perfectamente, gracias! Este es un detalle, pero ¿sabes la respuesta a mi segunda pregunta? ¿Por qué no puedo usar directamente el atributo 'color = white' en la función' geom_map'? – yellowcap

+0

@yellowcap No sé, principalmente porque no estoy seguro de cuál es su problema específico en el segundo caso. – joran

+0

@yellowcap Probablemente es demasiado tarde para que esto sea útil, pero desea 'color =" white "' en la llamada 'geom_map' pero no en la llamada' aes'. No es estético porque no depende de tus datos. Siempre es solo blanco. – Gregor