2016-08-03 12 views
4

Я знаю, что этот вопрос задан несколько раз, но я думаю, что некоторые из базового синтаксиса для сюжета изменились с тех пор, как были заданы эти вопросы. Использование 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 

То, что сейчас происходит, просто меня озадачивает. Это добавляет дополнительную всплывающую подсказку отдельно от предыдущей. Эта новая подсказка - именно то, что я хочу, но оба они появляются - не сразу, а если я передвигаю мою мышь. Смотрите два скриншота ниже:

This is the old tooltip from before that still lingers This is the new one and the only one I want to keep

Обратите внимание, эти подсказки из того же блока (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 

Это производит следующий сюжет:

enter image description here

Обратите внимание, что «провинция» теперь капитализируются (это не было раньше). Трюк добавляет text = paste("Province:", NAME_1) к эстетике.ОДНАКО, когда я пытался добавить дополнительные изменения меток с помощью text2=paste("Example III:", example1), происходит следующее:

enter image description here

Обратите внимание, что он не может сделать text2 таким же образом он оказывает text1. Так что вместо этого я просто попробуйте добавить дубликат без text2 как в следующем: text=paste("Example III:", example1) -Какой производит следующий странный результат:

enter image description here

Я начинаю что-то просто переключая «Легенда» варианты в думать Преобразование ggplot в plotly невозможно. ОБНОВЛЕНИЕ № 4: Поэтому я решил подойти по-другому. Вместо этого я решил сам изменить имена переменных. Я бы сделал это с самого начала, за исключением того, что не был уверен, что/ggplot2 принимает переменные с пробелами - вычисленный `variable`, который может работать. Поэтому я пошел вперед и переписал переменные. Он работает -KINDA. Проблема заключается в том, что текст появляется с кавычками вокруг них. Теперь мне нужен способ избавиться от них !!! Какие-нибудь идеи? Благодаря! Вот образ того, что я имею в виду цитаты в тексте:

enter image description here

+0

мне было интересно, если вы когда-нибудь столкнулся с проблемой попытки обозначить точки с аннотации, а затем имеющие разные переменные для всплывающей подсказки. Например, маркировка этих регионов по их имени, а затем наличие статистики отображения всплывающей подсказки. Я пытался это сделать, но ggplotly всегда принимает метки как текст всплывающей подсказки, даже если я явно передаю как текст, так и метку. Любые идеи, которые могли бы помочь? – jtanman

ответ

6

Я новичок в plotly тоже, но столкнулся с подобной проблемой для моих ggplot2 пузыря участков при использовании ggplotly(). Я, наконец, нашел решение, которое работает для меня, и подумал, что это тоже может вам помочь, хотя я не пробовал его для карт choropleth.

Ваш первый вопрос состоял в том, чтобы настроить всплывающую подсказку, чтобы отображать некоторые переменные в наборе данных (включая те, которые не отображаются на эстетику).
В вашем ОБНОВЛЕНОМ № 3 вы вводите: text = paste("Province:", NAME_1) в свой адрес. Если вы хотите добавить вторую строку пользовательских переменных или текста, просто продолжайте добавлять его в квадратные скобки: 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")) Порядок переменных, указанных в подсказке, будет таким же, как порядок, указанный в аргументе tooltip. Я нашел это документировано здесь: https://github.com/ropensci/plotly/blob/master/R/ggplotly.R

Это решение работало (в принципе) для меня с помощью R 3.1.1 и 3.4.13 plotly

+0

Знаете ли вы, что можно избавиться от всплывающей подсказки, которая появляется при наведении курсора на другие сопоставления aes, такие как граница этого вопроса?Например, в моем ggplot у меня есть метки рядом с точками данных и построено мое текстовое сопоставление так же, как вы рекомендовали в примере: ggplot (randomData, aes (x, y, label = ip_country, text = paste ('Страна:', ip_country, '
', 'х:', х)) + geom_point() + geom_text (AES (х = х-1)) Тогда, когда я конвертировать с помощью ggplotly, текстовую метку также имеет всплывающую подсказку, которая показывает только текстовую метку, тогда как фактическая точка данных покажет правильную подсказку для зависания. – jtanman