Plotly: как установить ylim и xlim для карты? - PullRequest
6 голосов
/ 05 августа 2020

Цель: Я пытаюсь создать интерактивную версию карты ggplot2, используя plotly (через ggplotly).

Проблема: Графически добавляет дополнительное пространство выше и под диаграммой, а не «растягивать» диаграмму, как должно (см., например, изображения).

Пример

Что я хочу (пример, сделанный в ggplot2):

enter image description here

What I'm getting (example made in plotly):

введите описание изображения здесь

Я понимаю, что aspect.ratio не поддерживается в ggplotly, но есть ли другой способ удалить пространство сверху и снизу, сохраняя при этом ось x (-12,2) и ось y ( 50,60) без ограничений

Код:

library(maps)
library(ggplot2)
library(plotly)

boundaries <- ggplot2::map_data("world", region=c("UK","Ireland","France","Norway"))

map <- ggplot() +
  geom_polygon(data=boundaries, aes(x=long, y=lat, group=group), color="black", fill="white") +
  coord_sf(xlim=c(-12, 2), ylim=c(50,60)) +
  theme(aspect.ratio = 1.2)

show(map)

visual <- ggplotly(map, height=1.2*400, width=400, tooltip=c("text"), hoverinfo='hide', 
                               dynamicTicks=F) %>%
  layout(xaxis=list(autorange=F, range=c(-12, 2)), yaxis = list(autorange=F, range=c(50,60)))

show(visual)

Чтобы воспроизвести проблему:

ОС: Windows 10 IDE: RStudio П: 3.6.1 р

Ответы [ 2 ]

6 голосов
/ 05 августа 2020

Вы используете coord_sf, который предназначен для специального класса фреймов данных sf, а не многоугольников, которые идут с ggplot. Вы можете использовать такой пакет, как rnaturalearth, чтобы легко получать данные в этом формате. Здесь я выбрал изображение с высоким разрешением, но если вам сложно установить rnaturalearthhires, просто выберите «средний» для размера карты.

library(ggplot2)
library(plotly)
library(rnaturalearth)
library(sf)

df <- ne_countries(country = c("United Kingdom", "Ireland", "France", "Norway"),
                   returnclass = "sf",
                   scale = "large")

map <- ggplot(df) +
  geom_sf(color = "black", fill = "white") +
  coord_sf(xlim = c(-12, 2), ylim = c(50, 60))

show(map)

enter image description here

and we get the plotly map like this:

visual <- ggplotly(map, height = 1.2 * 600, width = 600, tooltip=c("text"), 
                   hoverinfo='hide', dynamicTicks = FALSE) 

show(visual)

введите описание изображения здесь

4 голосов
/ 06 августа 2020

Для информации, если вы используете R в службе Power BI, вы делаете это следующим образом:

Вы можете получить желаемый результат, добавив масштабное отношение к параметру xaxis в макете (см. код ниже).

library(maps)
library(ggplot2)
library(plotly)

boundaries <- ggplot2::map_data("world", region=c("UK","Ireland","France","Norway"))

map <- ggplot() +
  geom_polygon(data=boundaries, aes(x=long, y=lat, group=group), color="black", fill="white") +
  coord_sf(xlim=c(-12, 2), ylim=c(50,60)) 

show(map)

visual <- ggplotly(map, height=1.2*400, width=400, tooltip=c("text"), hoverinfo='hide', 
 dynamicTicks=F) %>%
  layout(xaxis=list(scaleratio=0.6))

show(visual)

* Служба Power BI не поддерживает естественное отображение в соответствии с принятым ответом (https://docs.microsoft.com/en-us/power-bi/connect-data/service-r-packages-support)

введите описание изображения здесь

...