Изменить размер текста при наведении в Plotly

Я строю сюжет Plotly на основе ggplot в R. Я хотел бы увеличить размер текста в полях наведения. Предположим, у меня есть такая диаграмма рассеяния:

library(plotly)
library(ggplot2)

d <- data.frame(a = sample(1:50, 30, T), 
                b = sample(1:50, 30, T), 
                col = factor(sample(1:3, 30, T)))

gg <- ggplot() + geom_point(aes(x = a, y = b, color = col), data = d)

p <– plotly_build(gg)
p

Есть ли способ изменить размер текста при наведении?


person nhoeft    schedule 28.06.2016    source источник
comment
пожалуйста, смотрите мой ответ ниже, чтобы узнать, что я считаю правильным способом сделать это в R   -  person rmg    schedule 25.07.2017


Ответы (2)


В настоящее время, похоже, нет встроенного способа передачи дополнительных атрибутов для определения внешнего вида при наведении непосредственно через график (см. ошибка github #102). Однако в описании проблемы вы видите имя класса, используемого для текста при наведении, а именно .hovertext. Самым простым решением было бы сохранить вас в виде HTML-файла и вручную добавить приведенный ниже CSS где-нибудь в <head> части HTML. Если вы хотите изменить размер текста легенды, оставьте .legendtext строки, если не сотрите их.

<style type="text/css">
.hovertext text {
    font-size: 100px !important;
}
.legendtext {
    font-size: 30px !important;
}
</style>

Если вы хотите внедрить CSS с помощью R, а не вручную, у вас есть несколько вариантов.

# the CSS we want to inject
css <- '
<style type="text/css">
.hovertext text {
    font-size: 100px !important;
}
.legendtext {
    font-size: 30px !important;
}
</style>'

library(plotly)
library(htmltools)
library(htmlwidgets)

1: изменить файл HTML после создания

x <- as.widget(p)                                 # convert to htmlwidget object 
saveWidget(x, file="test_edited_1.html")          # and save to file
l <- readLines("test_edited_1.html")              # read file
h <- paste(l, collapse= " ")               
hh <- strsplit(h, "<head>")[[1]]                  # split where head appears
h.new <- paste(hh[1], css, hh[-1], collapse=" ")  # insert CSS
writeLines(h.new, "test_edited_1.html")           # write back to file

2: изменить объект, из которого создается файл HTML

x <- as.widget(p)                                 # convert to htmlwidget object 
# add a the code directly into <head> using `htmltools::htmlDependency`
x$dependencies <- list(
    htmlDependency(
        name = "custom",
        version="1",
        src="",
        head=css)  
    )
saveWidget(x, file="test_edited_2.html")

Хотя второй работает, я не уверен, что это правильное использование htmlDependency.

Результат

введите описание изображения здесь

person Mark Heckmann    schedule 10.07.2016

Недавно было выпущено обновление для plotly, которое позволяет изменять различные характеристики наведите текст. Вот пример в R:

plot_ly(x=c(1:42),
        y=c(1:42),
        text=c(1:42),
      type="bar")%>%
  layout(
    title = paste("Top 42"),
    hoverlabel = list(font=list(size=10))
  )

Есть также варианты изменения цвета шрифта, bgcolor и т. д.

person rmg    schedule 25.07.2017