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:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
带 plotly 的树状图 - 如何为层次聚类设置自定义链接方法