2012-05-13 33 views
5

Tôi gặp sự cố tương tự như @Mike trong this question. Câu hỏi là làm thế nào để thiết lập các màu sắc phác thảo của các khu vực trong một lô bản đồ.đường viền geom_map trong ggplot2 - xem lại

Giải pháp được đề xuất là thêm geom_polygon để vẽ qua biên giới. Điều này hoạt động, miễn là toàn bộ khu vực được vẽ. Khi cố gắng để hạn chế đến một tiểu khu vực, các đa giác được rút ra kỳ lạ (có lẽ vì một số đỉnh được giảm xuống). Sử dụng các tiêu chuẩn geom_map dụ:

# 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) 

Sự chỉnh sửa có đang sử dụng các thẩm mỹ màu trong geom_map và sau đó tự chọn màu phác thảo với scale_colour_manual, như sau:

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) 

Vì vậy, tôi có hai câu hỏi:

  1. Tại sao geom_polygon không hoạt động bình thường khi giới hạn trục bị hạn chế?
  2. Có một giải pháp thanh lịch hơn để tô màu các đường viền ngoài màu được phác thảo ở đây không?

Dưới đây là kết quả đầu ra của lô. Rất cám ơn trước.

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

Trả lời

8

Tôi tin rằng bạn là chính xác là tại sao nó không hoạt động. Giới hạn giới hạn x hoặc y bằng cách sử dụng xlim hoặc ylim ghi lại dữ liệu trước khi vẽ. Điều này sẽ kết thúc bỏ qua một số đỉnh từ đa giác của bạn, do đó, một số công cụ sẽ không được vẽ.

Đây là lý do tại sao có coord_cartesian, cho phép bạn điều chỉnh giới hạn x và y mà không cần cắt bớt dữ liệu. Nó sẽ "phóng to" vào vùng chính xác, thay vì cắt và sau đó vẽ.

Vì vậy, thay vì ylim, hãy thử + coord_cartesian(ylim = c(0,3)).

+0

điều này hoạt động đúng đắn, cảm ơn! Đây là một chi tiết, nhưng bạn có biết câu trả lời cho câu hỏi thứ hai của tôi không? Tại sao tôi không thể sử dụng 'color = white' aestetic trong hàm' geom_map' trực tiếp? – yellowcap

+0

@yellowcap Tôi không biết, chủ yếu là vì tôi không chắc chắn vấn đề cụ thể của bạn là gì trong trường hợp thứ hai. – joran

+0

@yellowcap Có lẽ đã quá muộn để điều này hữu ích, nhưng bạn muốn 'color =" white "' trong cuộc gọi 'geom_map' nhưng không phải trong cuộc gọi' aes'. Nó không phải là một thẩm mỹ bởi vì nó không phụ thuộc vào dữ liệu của bạn. Nó luôn luôn là màu trắng. – Gregor

Các vấn đề liên quan