繁体   English   中英

使用r中的ggplot2在工具提示中编辑用于绘制地图的标签

[英]Edit labels in tooltip for plotly maps using ggplot2 in r

我知道这个问题已被多次询问,但我认为,自从提出这些问题以来,情节的一些基本语法已经改变了。 使用ggplotly()创建一个等值区域贴图,从我的美学中提供了long,lat,group和我的一个变量的默认工具提示。 我知道工具提示只映射了美学中的什么。 我想要做的就是自定义工具提示,以便在我的数据集中显示一些变量(包括那些未映射到美学的变量)而不显示其他变量(例如坐标)。 下面是一个可重复的例子,到目前为止我尝试过的。 我跟着回答其他问题的建议无济于事。

#Load dependencies
library(rgeos)
library(stringr)
library(rgdal)
library(maptools)
library(ggplot2)
library(plotly)

#Function to read shapefile from website
dlshape=function(shploc, shpfile) {
  temp=tempfile()
  download.file(shploc, temp)
  unzip(temp)
  shp.data <- sapply(".", function(f) {
    fp <- file.path(temp, f)
    return(readOGR(".",shpfile))
  })
}

austria <- dlshape(shploc="http://biogeo.ucdavis.edu/data/gadm2.8/shp/AUT_adm_shp.zip", 
                   "AUT_adm1")[[1]]
#Create random data to add as variables
austria@data$example1<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
austria@data$example2<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
austria@data$example3<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)

#Fortify shapefile to use w/ ggplot
austria.ft <- fortify(austria, region="ID_1")
data<-merge(austria.ft, austria, region="id", by.x = "id", by.y = "ID_1")

#Save as ggplot object    
gg<-ggplot(data, aes(x = long, y = lat, fill = example1, group = group)) + 
  geom_polygon() + geom_path(color="black",linetype=1) + 
  coord_equal() +
  scale_fill_gradient(low = "lightgrey", high = "darkred", name='Index') +xlab("")+ylab("") + 
  theme(axis.text = element_blank(), 
        axis.title = element_blank(), 
        axis.ticks = element_blank()) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
        panel.background = element_blank(), axis.line = element_line(colour = "black")) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
        panel.background = element_blank(), axis.line = element_line(colour = "black"))

#Plot using ggplotly
ggplotly(gg)

从这里开始,我尝试了两种不同的方法。 最成功的方法之一就是让我在那里。 我可以将新变量添加到工具提示中但我不能做两件事:1)我无法摆脱默认情况下已经显示的其他变量(来自美学)和2)我不能将变量重命名为除了列名以外的变量数据集(例如,我想将“example3”标记为“示例III”)。这是方法:

#Save as a new ggplot object except this time add ``label = example3`` to the aesthetics
 gg2<-ggplot(data, aes(x = long, y = lat, fill = example1, group = group, label = example3)) + 
  geom_polygon() + geom_path(color="black",linetype=1) + 
  coord_equal() +
  scale_fill_gradient(low = "lightgrey", high = "darkred", name='Index') +xlab("")+ylab("") + 
  theme(axis.text = element_blank(), 
        axis.title = element_blank(), 
        axis.ticks = element_blank()) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
        panel.background = element_blank(), axis.line = element_line(colour = "black")) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
        panel.background = element_blank(), axis.line = element_line(colour = "black"))

#Save as plotly object then plot
gg2 <- plotly_build(gg2)
gg2

我也尝试添加以下内容但它没有做任何事情:

gg2$data[[1]]$text <- paste("Example I:", data$example1, "<br>",
                           "Example II:", data$example2, "<br>",
                           "Example III:", data$example3)

任何帮助深表感谢!

更新:我更新plotly从github上,而不是安装CRAN。 使用这个更新版本(4.0.0)我已经把它分开了。

gg2$x$data[[2]]$text <- paste("Example I:", data$example1, "<br>",
                             "Example II:", data$example2, "<br>",
                             "Example III:", data$example3)
gg2

现在发生的事情简直让我感到困惑。 这会增加一个与前一个工具提示分开的额外工具提示。 这个新的工具提示正是我想要的,但是它们都出现了 - 不是一次但是如果我移动我的鼠标。 请参阅以下两个屏幕截图:

这是之前仍然存在的旧工具提示 这是新的,也是我唯一要保留的

请注意,这些工具提示来自同一个单元(蒂罗尔)。 这可能是包中的错误吗? 显示其他图形(例如时间序列而不是地图)时不会发生这种情况。 另请注意,我指定了标签“示例I”(或II或III),但这并未在我添加的新工具提示中显示。

更新#2:我发现旧的工具提示(显示长和lat)仅在悬停在边框上时出现,因此我摆脱了geom_path(color="black",linetype=1)命令(以删除边框) )现在我成功解决了这个问题。 但是,我仍然无法修改工具提示中显示的标签。

更新#3:我想出了如何编辑标签,但只有一个变量。 哪个是坚果! 这是我从开始到结束的工作流程:

 #Load dependencies
    library(rgeos)
    library(stringr)
    library(rgdal)
    library(maptools)
    library(ggplot2)
    library(plotly)

    #Function to read shapefile from website
    dlshape=function(shploc, shpfile) {
      temp=tempfile()
      download.file(shploc, temp)
      unzip(temp)
      shp.data <- sapply(".", function(f) {
        fp <- file.path(temp, f)
        return(readOGR(".",shpfile))
      })
    }

    austria <- dlshape(shploc="http://biogeo.ucdavis.edu/data/gadm2.8/shp/AUT_adm_shp.zip", 
                       "AUT_adm1")[[1]]
    #Create random data to add as variables
    austria@data$example1<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
    austria@data$example2<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
    austria@data$example3<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)

    #Fortify shapefile to use w/ ggplot
    austria.ft <- fortify(austria, region="ID_1")
    data<-merge(austria.ft, austria, region="id", by.x = "id", by.y = "ID_1")

    #Save as ggplot object    
    gg<-ggplot(data, aes(x = long, y = lat, fill = example1, group = group, text = paste("Province:", NAME_1))) + 
      geom_polygon(color="black", size=0.2) + 
      coord_equal() +
      scale_fill_gradient(low = "lightgrey", high = "darkred", name='Index') +xlab("")+ylab("") + 
      theme(axis.text = element_blank(), 
            axis.title = element_blank(), 
            axis.ticks = element_blank()) + 
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
            panel.background = element_blank(), axis.line = element_line(colour = "black")) + 
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
            panel.background = element_blank(), axis.line = element_line(colour = "black"))


gg <- plotly_build(gg)
gg

这产生了以下情节:

在此输入图像描述

请注意,“省”现在已大写(之前不是)。 诀窍是将text = paste("Province:", NAME_1)到美学中。 但是,当我尝试使用text2=paste("Example III:", example1)添加其他标签更改时,会发生以下情况:

在此输入图像描述

请注意,它无法以与呈现text1相同的方式呈现text2。 所以我只是尝试添加没有text2的副本,如下所示: text=paste("Example III:", example1) - 它产生以下奇怪的结果:

在此输入图像描述

我开始认为在plotly的ggplot转换中切换“图例”选项这么简单是不可能的。 更新#4:所以我决定采用另一种方式。 相反,我决定自己更改变量名称。 我会从一开始就做到这一点,除了我不确定ggplot2是否/如何接受带空格的变量-i想出可以工作的`variable` 所以我继续并重新标记变量。 它有效--KINDA。 问题是文本出现时带有引号。 现在我需要一种摆脱这些的方法! 任何人的想法? 谢谢! 这是我在文中引用的意思的图像:

在此输入图像描述

我是新手,但在使用ggplotly()时,我的ggplot2气泡图遇到了类似的问题。 我终于找到了一个对我有用的解决方案,并认为它也可能对你有所帮助,虽然我还没有尝试过用于等值线图。

您的第一个问题是自定义工具提示,以便显示数据集中的一些变量(包括那些未映射到美学的变量)。
在您的更新#3中,您将: text = paste("Province:", NAME_1)引入您的aes。 如果要添加第二行自定义变量或文本,只需将其添加到括号中: text = paste("Province:", NAME_1, "Example III:", example1)在两者之间添加换行符<br>在您想要休息的地方,例如: text = paste("Province:", NAME_1, "<br>", "Example III:", example1)

您的第二个问题是自定义工具提示,因此它不显示其他(默认)变量(映射到美学,例如坐标)。
我发现ggplotly()函数很容易添加到我这里的技巧: ggplotly(gg, tooltip = c("text"))在我的例子中,这删除了工具提示中显示的所有默认变量并且只显示那些用上面的text指定的自定义。 您可以通过执行ggplotly(gg, tooltip = c("text","x"))添加其他变量ggplotly(gg, tooltip = c("text","x"))工具提示中显示的变量的顺序将与tooltip参数中指定的顺序相同。 我在这里记录了这个: https//github.com/ropensci/plotly/blob/master/R/ggplotly.R

这个解决方案(原则上)使用R 3.1.1和图3.4.13

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM