使用ggplot以图形方式禁用悬停文本

我想在plotly中部分禁用悬停文本,将其限制为ggplot中的一个数据帧或geom.在下面的例子中,我想只悬停在“城市”而不是地图轮廓上.我已经在
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

最佳答案 首先,我必须承认在阅读您的问题之前我不了解plotly和mapdata包.但这些看起来非常有用我开始玩,最后产生了一些有用的东西.

我认为你的一些问题是因为你使用的是ggplotly函数,而不是我在解决方案中使用的直接plot_ly接口.

数据准备

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ō"

地理对象

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

g <- list(
  showland = F,
  coastlinewidth = 0,
  lonaxis = list(
    showgrid = TRUE,
    gridwidth = 0.5,
    range = c(125, 145.8224),
    dtick = 5
  ),
  lataxis = list(
    showgrid = TRUE,
    gridwidth = 0.5,
    range = c(25, 45.52),
    dtick = 5
  )
)

添加数据

首先用你的观点创建一个散点图:

p <- plot_ly(data = df,lon = Longitude,lat = Latitude,name="City",
             text =Name_2,type = "scattergeo",mode = "markers")

然后添加成本行并禁用悬停信息(hoverinfo =“none”):

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

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

p <- layout(p, geo = g)

最后的评论

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

对于我使用Name_2工作正常,我不知道你的意思是“控制图像大小”你可能想问一些不同的问题,你进一步指明你想要的.祝好运!

点赞