Edite etiquetas na dica de ferramenta para mapas de plotagem usando ggplot2 em r
Eu sei que essa pergunta foi feita várias vezes, mas acho que algumas das sintaxes subjacentes do plotter mudaram desde que essas perguntas foram feitas. Usandoggplotly()
criar um mapa de coroas fornece a dica de ferramenta padrão de long, lat, group e uma das minhas variáveis da minha estética. Entendo que a dica de ferramenta mapeia apenas o que está na estética. Tudo o que eu quero fazer é personalizar a dica de ferramenta para que ela exiba algumas das variáveis no meu conjunto de dados (incluindo aquelas não mapeadas para a estética) e outras (como as coordenadas). Abaixo está um exemplo reproduzível e o que eu tentei até agora. Eu segui o conselho dado em resposta a outras perguntas sem sucesso.
#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)
A partir daqui, tentei duas abordagens diferentes. A abordagem mais bem-sucedida me leva até lá em parte. Posso adicionar novas variáveis à dica de ferramenta, mas não posso fazer duas coisas: 1) Não consigo me livrar de outras variáveis já exibidas por padrão (da estética) e 2) Não consigo renomear as variáveis como algo que não seja o nome da coluna no conjunto de dados (por exemplo, gostaria de rotular "example3 como" Exemplo III "). Aqui está essa abordagem:
#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
Eu também tentei adicionar o seguinte, mas ele não fez nada:
gg2$data[[1]]$text <- paste("Example I:", data$example1, "<br>",
"Example II:", data$example2, "<br>",
"Example III:", data$example3)
Qualquer ajuda é muito apreciada!
UPDATE: eu atualizeiplotly
instalando a partir do github em vez do CRAN. Usando esta versão atualizada (4.0.0), eu fiz isso à parte.
gg2$x$data[[2]]$text <- paste("Example I:", data$example1, "<br>",
"Example II:", data$example2, "<br>",
"Example III:", data$example3)
gg2
O que acontece agora simplesmente me confunde. Isso adiciona uma dica de ferramenta adicional separada da anterior. Essa nova dica de ferramenta é exatamente o que eu quero, no entanto, as duas aparecem - não de uma só vez, mas se eu mover o mouse. Veja as duas imagens abaixo:
Observe que essas dicas são da mesma unidade (Tirol). Isso pode ser um bug no pacote? Isso não ocorre quando outros gráficos são exibidos, como uma série temporal, em vez de um mapa. Observe também que designei o rótulo "Exemplo I" (ou II ou III) e isso não aparece na nova dica de ferramenta que adicionei.
ATUALIZAÇÃO # 2: Eu descobri que a dica de ferramenta antiga (com long e lat mostrado) só aparece quando pairando sobre as bordas, então me livrei dogeom_path(color="black",linetype=1)
comando (como remover as bordas) e agora consegui resolver esse problema com êxito. No entanto, ainda não consigo modificar os rótulos que aparecem na dica de ferramenta.
ATUALIZAÇÃO # 3: Eu descobri como editar os rótulos, mas APENAS UMA VARIÁVEL. O que é loucura! Aqui está o meu fluxo de trabalho do início ao fim:
#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
Isso produz o seguinte gráfico:
Observe que "Província" agora está em maiúscula (não era antes). O truque foi adicionartext = paste("Province:", NAME_1)
para a estética. No entanto, quando tentei adicionar alterações adicionais de etiqueta usandotext2=paste("Example III:", example1)
, ocorre o seguinte:
Observe que ele não pode renderizar texto2 da mesma maneira que renderiza texto1. Então, em vez disso, tentei adicionar uma duplicata sem o texto2, como no seguinte:text=paste("Example III:", example1)
-que produz o seguinte resultado ímpar:
Estou começando a pensar que algo tão simples quanto alternar as opções de "legenda" na conversão ggplot do plotly é impossível. ATUALIZAÇÃO # 4: Então decidi abordar isso de outra maneira. Em vez disso, decidi alterar os nomes das variáveis. Eu teria feito isso desde o início, exceto que não tinha certeza se / como o ggplot2 aceita variáveis com espaços -i descobri`variable`
isso pode funcionar. Então eu fui em frente e re-rotulei as variáveis. Funciona -KINDA. O problema é que o texto aparece entre aspas. Agora eu preciso de uma maneira de me livrar deles !!! Alguma idéia para alguém? Obrigado! Aqui está uma imagem do que quero dizer com citações no texto: