Plotly:如何为地图设置 ylim 和 xlim?

Posted

技术标签:

【中文标题】Plotly:如何为地图设置 ylim 和 xlim?【英文标题】:Plotly: How do I set ylim and xlim for a map? 【发布时间】:2020-11-25 23:59:58 【问题描述】:

目标: 我正在尝试使用 plotly(通过 ggplotly)创建 ggplot2 地图的交互式版本。

问题:在图表上方和下方添加额外的空间,而不是像应有的那样“拉伸”图表(例如,参见图片)。

示例

我想要的(ggplot2中的例子):

我得到了什么(情节中的例子):

我知道 ggplotly 不支持 aspect.ratio,但有没有其他方法可以删除上方和下方的空间,同时保持 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 R:R 3.6.1

【问题讨论】:

我可以复制您的问题。您可以通过设置高度和宽度以匹配范围的比率(10 度长到 14 度纬度)来解决此问题。接近你的尺寸是 height = 300, width = 420。它不漂亮,也不是正确的纵横比,但它排除了垂直轴上的所有额外区域。 嗨,Ben,同意这个半工程:按要求删除空白空间,但遗憾地压扁了地图! 【参考方案1】:

您使用的是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)

我们得到这样的情节地图:

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

show(visual)

【讨论】:

【参考方案2】:

有关信息,如果您在 Power BI 服务中使用 R,您可以这样做:

您可以通过向布局中的 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)

*根据接受的答案 (https://docs.microsoft.com/en-us/power-bi/connect-data/service-r-packages-support),Power BI 服务不支持 rnaturalearth

【讨论】:

不错!对于同时使用 R、Plotly 和 PowerBI 的其他人来说,这是一项宝贵的贡献!

以上是关于Plotly:如何为地图设置 ylim 和 xlim?的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何为使用多条轨迹创建的图形设置调色板?

Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?

带 plotly 的树状图 - 如何为层次聚类设置自定义链接方法

Plotly:如何为每个变量创建具有不同样式和颜色的线图?

Plotly:如何为标准偏差制作具有多条线和阴影区域的图形?

如何为具有多个 y 轴的图表设置动画(python)