在ggplot中保持通用图例比例并闪亮

时间:2018-12-08 16:18:44

标签: r ggplot2 shiny

我有一个闪亮的应用程序,它需要8年的数据集,并按月进行拆分。然后使用日期滑块,仅使用该月的数据创建ggplot。

正在使用的ggplot是:

  ggplot() +
      geom_map(
        map = wrld, data = wrld, aes(long, lat, map_id=region),
        color = "grey", fill ="white", size=0.1
      ) +
      geom_point(
        data = dat(), aes(longitude, latitude, size = freq), 
        shape=21, fill = "red", color = "white", stroke=0.01
      ) +
      scale_size(name = "# IPs", label=scales::comma, range = c(1,10)) +
      ggalt::coord_proj("+proj=wintri") +
      ggthemes::theme_map() +
      theme(legend.justification = "center") +
      theme(legend.position = "bottom") +
      labs(title=paste("Post frequency ", shiny())) +
      annotate("text", x = 0, y = -60, label = "Bots")

反应性元素dat()shiny()是通过以下代码创建的:

  shiny <- reactive({
    format(as.Date(input$slider), "%Y-%m")
  })
  dat <- reactive({
    count <- count(data.frame(splitted[[shiny()]]))
    counted <- ddply(count,"city_name",summarize,longitude=mean(longitude),latitude=mean(latitude),freq=sum(freq))
    counted <- counted[order(counted$freq),]
    counted[nrow(counted),1] <- "Bots"
    counted[nrow(counted),2:3] <- c(0,-55)
    counted
  })

显示了splitted的示例:

> head(splitted['2012-07'])
$`2012-07`
                                         city_name longitude latitude   dateline       ipaddress                date
348812                                    Oak Lawn  -87.7516  41.7143 1341093604   67.175.106.62 2012-07-01 00:00:04
348813                                    Richmond  -84.2955  37.7546 1341093617    76.177.28.76 2012-07-01 00:00:17
348814                                    Lynbrook  -73.6741  40.6571 1341093624   72.68.156.111 2012-07-01 00:00:24
348815                                    Oak Lawn  -87.7516  41.7143 1341093680   67.175.106.62 2012-07-01 00:01:20
348816                                   Las Vegas -115.0669  36.1730 1341093690   24.253.64.114 2012-07-01 00:01:30
348817                                    Richmond  -84.2955  37.7546 1341093698    76.177.28.76 2012-07-01 00:01:38
348818                                   Cleveland  -83.7500  34.5839 1341093716  67.140.236.247 2012-07-01 00:01:56
348819                                   Las Vegas -115.0669  36.1730 1341093782   24.253.64.114 2012-07-01 00:03:02
348820                                    Lynbrook  -73.6741  40.6571 1341093826   72.68.156.111 2012-07-01 00:03:46
348821                                    Oak Lawn  -87.7516  41.7143 1341093886   67.175.106.62 2012-07-01 00:04:46

闪亮的应用程序正常运行,并且地图正确更新。问题是,图例比例会更新每个地图。结果是,无论实际频率水平如何,地图都“看起来”相同。看一下这两个月: enter image description here enter image description here

即使第一张图片中的频率最高为4,000,第二张图片中的频率最高为80,点的大小也相同。查看整个帖子时可以理解其原因每天随着时间推移: enter image description here

我不是很了解我需要在ggplot上进行哪些更改,以便在所有时间段上强制使用相同的“大小比例”。

可以在https://pastebin.com/WjedbxT3上查看整个app.R文件

很遗憾,我不能共享887,000点的数据集。

1 个答案:

答案 0 :(得分:0)

我设法弄清楚了。我以为我已经尝试过了。

scale_size(name = "# IPs", label=scales::comma, range = c(2,25), limits = c(1,5000))