Vẽ biểu đồ thanh trên bản đồ trong R?


14

Tôi đang sử dụng plotrixtrong Rđể vẽ bản đồ cấp tiểu bang của Mỹ. Nó có một chức năng tuyệt vời floating.pieđể đặt biểu đồ hình tròn trên mỗi trạng thái.

Tôi đang tự hỏi nếu có các chức năng tương tự trong plotrixgói để hiển thị biểu đồ thanh ở mỗi trạng thái? (Tôi đã xem tài liệu và các chức năng liên quan đến biểu đồ thanh dường như không có khả năng này, nhưng tôi chỉ muốn chắc chắn.) Tôi thích làm việc trong gói âm mưu nếu có thể, nhưng hãy thoải mái đặt tên các gói khác.

Ví dụ, tôi sẽ quan tâm đến việc sản xuất một bản đồ tương tự như thế này (nhưng đối với Hoa Kỳ):

nhập mô tả hình ảnh ở đây

Đối với bản đồ Hoa Kỳ của tôi, sẽ có 50 biểu đồ thanh, mỗi biểu đồ cho mỗi tiểu bang.

Tôi đã nhận được bản đồ này từ /programming/20465070/barplots-on-a-map , nhưng có vẻ như gssubplot không hoạt động trên phiên bản R của tôi (tương tự như những gì người khác đã nói trên bài đăng ).


2
Tôi cũng biết làm thế nào để làm điều đó với ggsubplotgói, nhưng bây giờ nó không được dùng nữa và nó sẽ không hoạt động (như bạn đã đề cập). Có lẽ bài đăng này có thể là điểm khởi đầu: stackoverflow.com/questions/36063043/ Kẻ
Andre Silva

Tham khảo tài liệu về cốt truyện, để xem các chức năng đó có tồn tại không. Sau đó tham khảo ý kiến ​​của người tạo ra cốt truyện.
Mox

Câu trả lời:


1

Tôi biết tôi thực sự muộn với điều này, nhưng tôi nghĩ rằng tôi đã tìm thấy một giải pháp khá đơn giản.

Nếu bạn có một cái nhìn về mã nguồn của floating.pie()(ví dụ bằng cách gọi getAnywhere(floating.pie)), bạn sẽ nhận thấy rằng nó sử dụng một cách tiếp cận rất đơn giản nhưng hiệu quả: vẽ các phân đoạn hình tròn như đa giác. Nếu tất cả những gì bạn muốn từ biểu đồ thanh của bạn là các thanh (không có nhãn, trục, v.v.), bạn có thể làm theo cùng một cách tiếp cận và viết chức năng của riêng bạn. Đây là một phiên bản nhanh và bẩn:

# the function 
mapbars <- function (x, xllc = 0, yllc = 0, barwidth=1, maxheight=10){
  # calculate how long each bar needs to be
  bars <- (x/max(x)) * maxheight
  # get some quick colors
  col <- rainbow(length(x))

  for(i in 1:length(x)){
    # figure out x- and y coordinates for the corners
    leftx   <- xllc + ((i-1) * barwidth)
    rightx  <- leftx + barwidth
    bottomy <- yllc
    topy    <- yllc + bars[i]
    # draw the bar
    polygon(x=c(leftx, rightx, rightx, leftx, leftx),
            y=c(bottomy, bottomy, topy, topy, bottomy),
            col=col[i])
  }
}
  • x là cho các giá trị được đại diện bởi các thanh
  • xllcyllcchỉ định vị trí của góc dưới bên trái của thanh bên trái trong bất kỳ hệ tọa độ nào bạn đang sử dụng
  • barwidthmaxheightđược sử dụng để nhân rộng kích thước của các thanh

Dưới đây là một bản demo với một cơ bản spcốt truyện dựa trên. Tôi không nghĩ rằng tôi đã làm việc với plotrixtrước đây, nhưng dựa trên cách làm floating.pieviệc, tôi cho rằng điều này cũng sẽ làm việc với plotrix.

library(sp)
library(maptools) # just for easy access to a background map
# load some country borders as a background
data("wrld_simpl")
plot(wrld_simpl)

# zoom on a bit …
mexico <- subset(wrld_simpl, NAME=="Mexico")
plot(mexico, axes=TRUE)

# data for the bars
x1 <- c(4, 7, 1, 2)

# plot
plot(mexico, axes=TRUE)
mapbars(x=x1, xllc=-110, yllc=20, barwidth=.5, maxheight=5)
legend(x="topright", pch=22, col="black", pt.bg=rainbow(x1), legend=c("foo", "bar", "baz", "foobar"))

# add another one:
x2 <- c(9, 21, 64, 45, 33, 43, 12, 7)
mapbars(x=x2, xllc=-100, yllc=25, barwidth=.2, maxheight=2)

Kết quả trông như thế này: bản đồ ví dụ kết quả từ mã trên


-1

ggplot2ggvis hai thư viện mà có thể giúp bạn để hiển thị các âm mưu trên bản đồ. Trong ggplot2, bạn có thể vẽ các bong bóng trên bản đồ và sau đó bạn chỉ cần cung cấp cho aes () các tọa độ không liên quan gì đến kích thước và màu sắc của bong bóng. Về biểu đồ thanh, bạn cần gán ít nhất 2 cặp x và y, một cho vị trí biểu đồ thanh và một cho chiều cao và chiều rộng của biểu đồ thanh. Nói cách khác, bạn cần biết tọa độ của 4 góc cho một thanh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.