【发布时间】:2016-08-06 16:40:36
【问题描述】:
我正在开发一个 Shiny 应用程序,它应该让用户在 ggplot2 生成的世界地图上选择地理数据点(如 this example)。
如果我使用常规的 coord_cartesian 坐标系(这会扭曲地图),这会起作用,但如果我使用更合适的 coord_map 坐标系,则会失败。似乎点击/画笔事件在投影后没有收到正确的坐标。有什么方法可以解决或解决这个问题而不恢复到笛卡尔坐标?
您可以在下面找到一个工作示例:
library(shiny)
library(ggplot2)
library(dplyr)
map_world <- function(world, mapPoints, xlim, ylim){
# function to generate ggplot world map
ggplot() +
geom_polygon(data=world, aes(x=long, y=lat, group=group)) +
geom_point(data=mapPoints, aes(x=Longitude, y=Latitude), color="red") +
# coord_map messes up the brush select
coord_map(xlim=xlim, ylim=ylim)
# coord_cartesian would work but distort the map
# coord_cartesian(xlim=xlim, ylim=ylim)
}
mapPoints <- data.frame(Longitude=c(-103, -108, -130, -120),
Latitude=c(52, 40, 45, 54))
world <- map_data("world")
ui <- fluidPage(
fluidRow(
column(width = 6,
plotOutput("plot1", height = 300,
click = "plot1_click", brush = "plot1_brush") )
),
fluidRow(
column(width = 6,
h4("Near points"), verbatimTextOutput("click_info") ),
column(width = 6,
h4("Brushed points"), verbatimTextOutput("brush_info") )
)
)
server <- function(input, output) {
# output world map
output$plot1 <- renderPlot({
map_world(world = world, mapPoints = mapPoints,
xlim=c(-180,180), ylim=c(-90,90))
})
# output clicked points
output$click_info <- renderPrint({
nearPoints(mapPoints, xvar="Longitude",
yvar="Latitude", input$plot1_click)
})
# output brushed points
output$brush_info <- renderPrint({
brushedPoints(mapPoints, xvar="Longitude",
yvar="Latitude", input$plot1_brush)
})
}
shinyApp(ui, server)
谢谢!
【问题讨论】:
标签: r ggplot2 shiny coordinate-systems brush