【问题标题】:Tooltip in ggvis for R with layer_paths带有 layer_paths 的 R 的 ggvis 中的工具提示
【发布时间】:2015-10-13 20:36:24
【问题描述】:

我对 ggvis 中的等值线图的工具提示功能有疑问。我在下面附上了我的代码。代码运行良好,没有工具提示功能。但是如果我添加工具提示,则只剩下新泽西州的土地(见图)。其他州不见了。任何人都可以帮忙看看,我该如何修复它以恢复其他部分并添加工具提示功能?非常感谢!

###my data for example
mapdata<-data.frame(
  state=c("alabama","alaska","arizona","arkansas","california","colorado","connecticut","delaware","florida","georgia","hawaii","idaho","illinois","indiana","iowa","kansas","kentucky","louisiana","maine","maryland","massachusetts","michigan", "minnesota","mississippi","missouri","montana","nebraska","nevada","new hampshire","new jersey","new mexico","new york","north carolina","north dakota","ohio","oklahoma", "oregon","pennsylvania","rhode island","south carolina","south dakota","tennessee","texas","utah","vermont","virginia","washington","west virginia","wisconsin","wyoming"),
  revenue=runif(50,min=100,max=9000))

library(rgdal)   
library(ggplot2) 
library(ggvis)

url   <- "http://www2.census.gov/geo/tiger/GENZ2014/shp/cb_2014_us_state_20m.zip"
tf    <- tempfile()
td    <- tempdir()
download.file(url,tf, mode="wb")  
unzip(tf, exdir=td)                

usa <- readOGR(dsn=td, layer="cb_2014_us_state_20m")
shp <- usa[(!usa$STUSPS %in% c("AK","HI")),] 

df<- fortify(shp)                    
df<- merge(df,cbind(id=rownames(shp@data),shp@data),by="id")   
df$state <- tolower(df$NAME)                                                  
df<- merge(df,mapdata,by="state")  
df<- df[order(df$order),]       

####function for tooltip
gg<-df
gg$id<-1:nrow(gg)
values<-function(x){
  if(is.null(x)) return(NULL)
  row<-gg[gg$id==x$id,]
  paste0("State: ",row$state,"<br />",
         "Revenue: ", row$revenue, "<br />")
}
####ggvis choropleth
gg %>%
  group_by(group) %>%
  ggvis(~long, ~lat, key:=~id)  %>%
  hide_axis("x") %>% 
  hide_axis("y")%>%
  add_tooltip(values,"hover")%>%
  layer_paths(fill= ~revenue)

【问题讨论】:

标签: r ggvis choropleth


【解决方案1】:

我环顾四周并意识到,由于路径是由数据集的多行信息组成的,因此尝试像我们通常使用 key 那样为工具提示使用唯一的行 ID 是没有意义的.

然后我看到了这个very nice ggvis tutorial,我的前进道路变得更加清晰。您需要将工具提示基于您的 grouping 变量,然后以某种方式将该组中的许多行中的信息筛选为单个值。在其他选项中,您可以通过仅从组中拉出第一行或在创建工具提示函数时仅使用 unique 值来做到这一点。

这是我的意思的示例,使用您在 group_by 中使用的变量 group 来提取相关信息。

首先,使用head 获取第一行:

values = function(x){
    if(is.null(x)) return(NULL)
    row = head(gg[gg$group == unique(x$group), ], 1)
    paste0("State: ", row$state,"<br />",
           "Revenue: ", row$revenue, "<br />")
}

或者,只需提取您要显示的变量的unique 值(每个状态/组有一个)。这在您的情况下可以正常工作,因为您只显示两个值:

values2 = function(x){
    if(is.null(x)) return(NULL)
    row = gg[gg$group == unique(x$group), ]
    paste0("State: ", unique(row$state),"<br />",
           "Revenue: ", unique(row$revenue), "<br />")
}

现在从ggvis 中取出key 参数并使用新的工具提示函数之一。现在交互式图表似乎工作正常。

gg %>%
    group_by(group) %>%
    ggvis(~long, ~lat)  %>%
    hide_axis("x") %>% 
    hide_axis("y")%>%
    add_tooltip(values, "hover")%>%
    layer_paths(fill= ~revenue)

【讨论】:

  • Smith,我刚刚发布了另一个关于工具提示功能和闪亮反应的问题stackoverflow.com/questions/33133163/…
  • 史密斯,感谢您回复我的帖子。我有一个关于..我什么时候需要 key:=id 作为工具提示的问题?为什么我们不把 key:=group 放在这里?
  • @ouou 当您想显示与单行关联的信息时,例如显示与单个绘图点关联的信息时(我已经做了很多)。我的理解是,key 变量在您用于绘制的整个数据集中必须始终具有唯一值(而group 不会,因为每个级别都有多个记录)。
  • 嗨,史密斯。我在这里发布另一个问题。你能看看能不能帮忙吗?非常感谢! stackoverflow.com/questions/33267604/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多