Сохранение общего масштаба легенды в ggplot с блестящими - PullRequest
0 голосов
/ 08 декабря 2018

У меня блестящее приложение, которое берет набор данных, охватывающий 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
  })

Пример *Показано 1011 *:

> 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

Размер точек одинаков, хотя частота на первом изображении до4000, а частота на втором снимке - до 80. Причину этого можно понять, если посмотреть на общее количество сообщений за день с течением времени: enter image description here

Яне совсем понимая, что мне нужно изменить на ggplot, чтобы использовать одну и ту же «шкалу размеров» для всех периодов времени.

Весь файл app.R можно просмотреть в https://pastebin.com/WjedbxT3

К сожалению, я не могу поделиться набором данных из 887 000 точек.

1 Ответ

0 голосов
/ 08 декабря 2018

Мне удалось понять это.Я думал, что уже пробовал это.

scale_size(name = "# IPs", label=scales::comma, range = c(2,25), limits = c(1,5000))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...