Я знаю, что этот вопрос задан несколько раз, но я думаю, что некоторые из базового синтаксиса для сюжета изменились с тех пор, как были заданы эти вопросы. Использование ggplotly()
для создания карты choropleth дает подсказку по умолчанию из long, lat, group и одной из моих переменных из моей эстетики. Я понимаю, что всплывающая подсказка отражает только то, что в эстетике. Все, что я хочу сделать, это настроить всплывающую подсказку, чтобы отображать некоторые переменные в моем наборе данных (в том числе не сопоставленные с эстетикой), а не другие (такие как координаты). Ниже приведен воспроизводимый пример и то, что я пробовал до сих пор. Я следовал совету, даваемому в ответ на другие вопросы, но безрезультатно.Редактировать метки в подсказке для плоских карт с использованием ggplot2 в r
#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
[email protected]$example1<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
[email protected]$example2<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
[email protected]$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)
Любая помощь приветствуется!
UPDATE: Я обновил 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
То, что сейчас происходит, просто меня озадачивает. Это добавляет дополнительную всплывающую подсказку отдельно от предыдущей. Эта новая подсказка - именно то, что я хочу, но оба они появляются - не сразу, а если я передвигаю мою мышь. Смотрите два скриншота ниже:
Обратите внимание, эти подсказки из того же блока (Tirol). Может ли это быть ошибкой в пакете? Это не происходит при отображении других графиков, таких как временные ряды, а не карты. Также обратите внимание, что я присвоил метку «Пример I» (или II или III), и это не отображается в новой всплывающей подсказке, которую я добавил.
ОБНОВЛЕНИЕ # 2: Я понял, что старая всплывающая подсказка (с длинными и показанными латами) появляется только при наведении курсора на границы, поэтому я избавился от команды 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
[email protected]$example1<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
[email protected]$example2<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
[email protected]$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)
, происходит следующее:
Обратите внимание, что он не может сделать text2 таким же образом он оказывает text1. Так что вместо этого я просто попробуйте добавить дубликат без text2 как в следующем: text=paste("Example III:", example1)
-Какой производит следующий странный результат:
Я начинаю что-то просто переключая «Легенда» варианты в думать Преобразование ggplot в plotly невозможно. ОБНОВЛЕНИЕ № 4: Поэтому я решил подойти по-другому. Вместо этого я решил сам изменить имена переменных. Я бы сделал это с самого начала, за исключением того, что не был уверен, что/ggplot2 принимает переменные с пробелами - вычисленный `variable`
, который может работать. Поэтому я пошел вперед и переписал переменные. Он работает -KINDA. Проблема заключается в том, что текст появляется с кавычками вокруг них. Теперь мне нужен способ избавиться от них !!! Какие-нибудь идеи? Благодаря! Вот образ того, что я имею в виду цитаты в тексте:
мне было интересно, если вы когда-нибудь столкнулся с проблемой попытки обозначить точки с аннотации, а затем имеющие разные переменные для всплывающей подсказки. Например, маркировка этих регионов по их имени, а затем наличие статистики отображения всплывающей подсказки. Я пытался это сделать, но ggplotly всегда принимает метки как текст всплывающей подсказки, даже если я явно передаю как текст, так и метку. Любые идеи, которые могли бы помочь? – jtanman