使用 ggplot 在绘图中禁用悬停文本

Mar*_*k R 6 r ggplot2 plotly

我想部分禁用绘图中的悬停文本,将其限制为 ggplot 中的一个数据框或几何图形。在下面的情况下,我只想将鼠标悬停在“城市”而不是地图轮廓上。我在 Python 中看到了一个解决方案,但在 R 中没有看到。我将如何控制图像大小以保持地图尺寸正确?https://plot.ly/ggplot2/interactive-tooltip/ 上的地图演示似乎并不在意!

library(mapdata)
library(ggplot2)
library(plotly)


Japan <- map_data("world2Hires", region="Japan")

Longitude <- 140
Latitude <- 36.5
df <- cbind.data.frame(Longitude,Latitude)
df$Name <- "Tokyo"
df$Name_2 <- "T?ky?"



XX <- ggplot() + geom_polygon(data=Japan, aes(x=long, y=lat, group=group), color="black", fill="white", text="") + coord_equal() + geom_point(data=df, aes(x=Longitude, y=Latitude, text=Name), color="green")
XX 
ggplotly(XX)  ##How to get hover text only on df not Japan, and remove "[object Object]" 

XX <- ggplot() + geom_polygon(data=Japan, aes(x=long, y=lat, group=group), color="black", fill="white", text="") + coord_equal() + geom_point(data=df, aes(x=Longitude, y=Latitude, text=Name_2), color="green")
XX 
ggplotly(XX)  ##Non-Ascii text breaks hover
Run Code Online (Sandbox Code Playgroud)

blu*_*ish 3

首先,我必须承认在阅读您的问题之前我不了解plotly 和mapdata 包。但这些看起来非常有用,我开始尝试并最终产生了一些有用的东西。

\n\n

我认为你出现的一些问题是因为你使用了ggplotly函数而不是直接plot_ly接口,这是我在解决方案中所做的。

\n\n

数据准备

\n\n
library(mapdata)\nlibrary(ggplot2)\nlibrary(plotly)\n\nJapan <- map_data("world2Hires", region="Japan")\nLongitude <- 140\nLatitude <- 36.5\ndf <- cbind.data.frame(Longitude,Latitude)\ndf$Name <- "Tokyo"\ndf$Name_2 <- "T\xc5\x8dky\xc5\x8d"\n
Run Code Online (Sandbox Code Playgroud)\n\n

地理对象

\n\n

这里准备了一个虚拟地理对象。这不会绘制任何东西,只是选择要显示的世界区域。您还可以在这里设置使用的投影。

\n\n
g <- list(\n  showland = F,\n  coastlinewidth = 0,\n  lonaxis = list(\n    showgrid = TRUE,\n    gridwidth = 0.5,\n    range = c(125, 145.8224),\n    dtick = 5\n  ),\n  lataxis = list(\n    showgrid = TRUE,\n    gridwidth = 0.5,\n    range = c(25, 45.52),\n    dtick = 5\n  )\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加数据

\n\n

首先创建一个scattergeo仅包含您的观点的绘图:

\n\n
p <- plot_ly(data = df,lon = Longitude,lat = Latitude,name="City",\n             text =Name_2,type = "scattergeo",mode = "markers")\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后添加成本线并禁用悬停信息 ( hoverinfo = "none"):

\n\n
p <- add_trace(data=Japan,lon = long,lat = lat, \n               mode = "lines",group=group,line = list(color=toRGB("black"),width = 0.5),\n               type = "scattergeo",  hoverinfo = "none",showlegend = F)\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后将布局设置为之前定义的地理对象:

\n\n
p <- layout(p, geo = g)\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后的评论

\n\n

https://plot.ly/r/reference/#layout-geo显示了地理对象可用的参数。https://plot.ly/r/lines-on-maps/显示了其中一些的代码示例。

\n\n

对我来说,使用Name_2效果很好,我不知道“控制图像大小”是什么意思,您可能想在进一步指定您想要的内容时提出不同的问题。祝你好运!

\n