使用 ggplot 在 plotly 中禁用悬停文本
Disable hover text in plotly with ggplot
我想部分禁用 plotly 中的悬停文本,将其限制为 ggplot 中的一个数据框或 geom。在下面的例子中,我只想将鼠标悬停在 "cities" 而不是地图轮廓上。我在 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
)
)
添加数据
首先用你的观点创建一个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 shows what parameters are available for a geo object. https://plot.ly/r/lines-on-maps/ 显示了其中一些的代码示例。
对我来说,使用 Name_2
效果很好,我不知道你用 "control the image size" 是什么意思,你可能想问一些不同的问题,你可以在其中进一步指定你想要的内容。祝你好运!
我想部分禁用 plotly 中的悬停文本,将其限制为 ggplot 中的一个数据框或 geom。在下面的例子中,我只想将鼠标悬停在 "cities" 而不是地图轮廓上。我在 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
)
)
添加数据
首先用你的观点创建一个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 shows what parameters are available for a geo object. https://plot.ly/r/lines-on-maps/ 显示了其中一些的代码示例。
对我来说,使用 Name_2
效果很好,我不知道你用 "control the image size" 是什么意思,你可能想问一些不同的问题,你可以在其中进一步指定你想要的内容。祝你好运!