2017-02-15 2 views
10

В настоящее время, если я хочу показать данные в таблице в R, я могу гиперссылки текста через markdown, html href или LaTeX href. Это часто бывает полезно для получения доступа к дополнительной информации о конкретном элементе без загромождения таблицы.Гиперссылка текста в визуализации ggplot2

Как можно передавать те же виды гиперссылок в визуализации, сделанные с помощью ggplot2?

Так, например, если я этот сюжет:

enter image description here

С ниже код, как я могу сделать текст гиперссылки оси на страницах Википедии, которые соответствуют?

library(tidyverse) 

mtcars %>% 
    rownames_to_column('car') %>% 
    slice(5:8) %>% 
    mutate(
     link = c(
      'https://de.wikipedia.org/wiki/AMC_Hornet', 
      'https://en.wikipedia.org/wiki/Plymouth_Valiant', 
      'https://en.wikipedia.org/wiki/Plymouth_Duster', 
      'https://en.wikipedia.org/wiki/Mercedes-Benz_W123' 
     ) 
    ) %>% 
    ggplot(aes(x = mpg, y = car)) + 
     geom_point(size = 2) 
+2

Сохранение с каким устройством? Очевидно, что JPEG и т. Д. Отсутствуют, но PDF может быть возможен через сетку. Для Интернета это может быть возможно через D3.js/SVG canvas, возможно, используя 'ggplotly' для первоначального преобразования. Я не думаю, что любой вариант будет простым. – alistaire

+0

Я думаю, что будет сложно применить отдельные ссылки на текст оси так, как они есть (* i think *) один grob, а не отдельный, но пакет 'gridSVG' показывает способы добавления ссылок на grobs при просмотре в браузере. Таким образом, вы можете использовать отдельные грызуны для очков, ярлыков и т. Д. И добавлять ссылки на них (у меня было это с этим [здесь] (http://chat.stackoverflow.com/rooms/135813/gridsvg)) – user20650

+0

@alistaire I ' d хотел бы использовать его в knitr/rmarkdown для pdf_document –

ответ

11

Вот один из вариантов, который я использовал.

Ваш пример:

library(tidyverse) 
library(xml2) 
df <- mtcars %>% 
    rownames_to_column('car') %>% 
    slice(5:8) %>% 
    mutate(
    link = c(
     'https://de.wikipedia.org/wiki/AMC_Hornet', 
     'https://en.wikipedia.org/wiki/Plymouth_Valiant', 
     'https://en.wikipedia.org/wiki/Plymouth_Duster', 
     'https://en.wikipedia.org/wiki/Mercedes-Benz_W123' 
    ) 
) 
p <- df %>% 
    ggplot(aes(x = mpg, y = car)) + 
    geom_point(size = 2) 

И потом:

ggsave(tf1 <- tempfile(fileext = ".svg"), p) 
links <- with(df, setNames(link, car)) 

xml <- read_xml(tf1) 
xml %>% 
    xml_find_all(xpath="//d1:text") %>% 
    keep(xml_text(.) %in% names(links)) %>% 
    xml_add_parent("a", "xlink:href" = links[xml_text(.)], target = "_blank") 
write_xml(xml, tf2 <- tempfile(fileext = ".svg")) 

Если вы откроете tf2 в вашем браузере:

enter image description here

+2

Вау, это впечатляет! – Gregor

+0

Я нашел это полезным, однако, я не знаю, работает ли он во всех браузерах. Я пробовал это с Chrome 56 и Firefox 50.1 на Windows ... – lukeA

+2

Это потрясающе. Работает в Firefox, Safari, Chrome, Opera и Vivaldi на MacOS. – alistaire

Смежные вопросы