r - 使用 ggplot 禁用绘图中的悬停文本

标签 r ggplot2 plotly

我想部分禁用绘图中的悬停文本,将其限制为 ggplot 中的一个数据帧或几何图形。在下面的情况下,我只想将鼠标悬停在“城市”而不是 map 轮廓上。我已经在 Python 中看到了解决方案,但没有在 R 中看到。我如何控制图像大小以保持 map 尺寸正确? map 演示位于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 接口(interface),我在解决方案中就是这样做的。

数据准备

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
  )
)

添加数据

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

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 效果很好,我不知道“控制图像大小”是什么意思,您可能想在进一步指定您想要的内容时提出不同的问题。祝你好运!

关于r - 使用 ggplot 禁用绘图中的悬停文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34108350/

相关文章:

r - 如何从使用 R 包 MICE 运行的模型中获取拟合值

r - 在 grid.arrange 中保留或设置文本标签与绘图大小之间的比例

python - 带有整数 xaxis 的甘特图的 Plotly Express 时间线?

r - 在 addmargins 函数上自定义 "Sum"标签

r - R:在foreach%dopar%中显示错误和警告消息

html - 如何分别控制Shiny中selectInput的标签和选择文本的字体大小样式?

r - 如何避免在文本注释上绘制 geom_line ?

r - 用 ggplot2 放置多图面板的标题

python - 在 Python 中,如何使用 'update_annotations' 更新 plotly 数字?

python - 将数据集与绘图进行比较 - 将虚线与实线混合