Отредактируйте метки во всплывающей подсказке для карт-графиков, используя ggplot2 в 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: Я понял, что старая всплывающая подсказка (с указанием long и 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)
происходит следующее:
Обратите внимание, что он не может отображать текст2 так же, как и текст1. Поэтому вместо этого я просто пытаюсь добавить дубликат без text2, как показано ниже:text=paste("Example III:", example1)
- который дает следующий странный результат:
Я начинаю думать о такой простой вещи, как переключение опций «легенды» в ggplot-конвертации plotly, невозможно. ОБНОВЛЕНИЕ № 4: Поэтому я решил подойти к этому по-другому. Вместо этого я решил изменить сами имена переменных. Я бы сделал это с самого начала, за исключением того, что я не был уверен, что ggplot2 / как принимает переменные с пробелами`variable`
это может работать. Поэтому я пошел дальше и переименовал переменные. Это работает -KINDA. Проблема в том, что текст появляется с кавычками вокруг них. Теперь мне нужен способ избавиться от них !!! Любые идеи кто-нибудь? Спасибо! Вот изображение того, что я подразумеваю под цитатами в тексте: