ggiraph: разные эффекты наведения на одном и том же ggplot
Моя цель - создать интерактивный полигон, который включает в себя метку и эффект наведения. Вот пример:
library(dplyr)
library(ggplot2)
library(ggiraph)
df <- data_frame(
x = c(0, 0, 3, 5, 3, 6, 0),
y = c(0, 4, 6, 5, 3, 0, 0),
tooltip = replicate(7, "Hello")
)
text_df <- data_frame(
x = 2,
y = 3,
label = "TEST",
tooltip = "Hello"
)
gg <- ggplot() +
geom_polygon_interactive(
data = df,
aes(
x = x,
y = y,
tooltip = tooltip,
data_id = tooltip
)
) +
geom_text_interactive(
data = text_df,
aes(
x = x,
y = y,
label = label,
tooltip = tooltip,
),
color = "white",
size = 5
)
ggiraph(
ggobj = gg,
hover_css = "fill:red;",
)
Когда я наводю курсор мыши на любое место внутри многоугольника (кроме метки), его цвет меняется, и текст все еще виден. Итак, все хорошо. Я хотел бы иметь такой же эффект и для лейбла. Я хочу, чтобы многоугольник менял цвет, а текст оставался неизменным при наведении курсора на ярлык. Попытка ниже заполняет ярлык, делая его неразборчивым.
# using the same data frame from the above-given example
gg2 <- ggplot() +
geom_polygon_interactive(
data = df,
aes(
x = x,
y = y,
tooltip = tooltip,
data_id = tooltip
)
) +
geom_text_interactive(
data = df,
aes(
x = 2,
y = 3,
label = "TEST",
tooltip = tooltip,
data_id = tooltip
),
color = "white",
size = 5
)
ggiraph(
ggobj = gg2,
hover_css = "fill:red;",
)
Можно ли настроить эффекты наведения для каждого компонента ggplot?
1 ответ
Как вы заметили, поскольку курсор при наведении курсора заполняет как многоугольник, так и текст, он становится неразборчивым. Вот взломанное решение, которое использует css для изменения того, как наведение полигона и текстового слоя влияет на наведение. Я знаю, как это сделать, только если вы сохраните виджет ggiraph в формате html и отредактируете его оттуда. Но я не изменил твой код в R.
Спасти gg2
виджет ggiraph
Это можно сделать с помощью htmlwidgets::saveWidget()
, RStudio Viewer или каким-либо другим способом. Проще всего, если файл не является автономным, так что вместе с файлом html создается папка скриптов и таблиц стилей.
#For example:
htmlwidgets::saveWidget(ggiraph(ggobj = gg2,
hover_css = "fill:red;"),
file = "widget.html",
selfcontained = FALSE)
Если вы сохраняете html из RStudio Viewer, файлы javascript кодируются в формате base64 в html-файле и должны быть декодированы для изменения. В файле HTML есть несколько <script src="data-application/x-javascript ... "></script>
теги с кодировкой. Я обнаружил, что второй до последнего будет эквивалентен ggiraphjs.min.js после его декодирования.
Отредактируйте файл ggiraphjs.min.js
В папке зависимостей рядом с html найдите файл widget_files / ggiraphjs-0.1.0 / ggiraphjs.min.js. Это сокращенный файл, поэтому некоторые парсеры javascript будут полезны, но не обязательны. Найдите место, где код добавляет стили CSS на страницу. Ищите это в коде. Если код хорошо напечатан, вокруг есть лишние пробелы, но это должно быть согласовано.
... "\ n.hover_"...
Здесь мы можем изменить CSS, который вводится в HTML. Как вы это измените, будет зависеть от используемых геомов ggplot2 и их эквивалента SVG. В этом случае, если вы хотите изменить цвет многоугольника, а не текста, мы можем добавить polygon
перед классом, чтобы указать, что .hover
класс будет влиять только на объекты многоугольника SVG: "\npolygon.hover_"
, Измените и сохраните файл.
Убедитесь, что JavaScript правильно связан с HTML-файла. Если вы не использовали автономный файл, это уже сделано. Если вы использовали автономный файл и декодировали файл base64, вам нужно заменить оригинальный тег script на <script type = "text/javascript">
пометить и поставить новый JavaScript перед закрытием </script>
пометить или поместить в отдельный файл и ссылку на него.
Загрузите HTML-файл
Теперь, когда файл javascript изменен, HTML будет отображен и добавит polygon.hover
класс в верхней части документа вместо .hover
класс раньше. Любые действия при наведении будут применяться только к типу тегов, добавленных здесь.