масштаб оси Y в процентах в ggplotly - PullRequest
3 голосов
/ 17 февраля 2020

Я использую scale_y_continuous для форматирования моей оси Y в процентах:

library(ggplot2)
ggplot(tibble(x=c(0,5,10),y=c(0,0.5,0.75)), aes(x=x,y=y)) + 
  geom_point() + 
  scale_y_continuous(limits=c(0,1), labels=scales::percent)

plotly::ggplotly()

Однако, как я могу сохранить этот формат во всплывающей подсказке plotly (которая показывает y как плавающие )

1 Ответ

3 голосов
/ 17 февраля 2020

Вы можете получить доступ к тексту всплывающей подсказки как

ply$x$data[[1]]$text

Так что приведенный ниже код может быть полезен

library(ggplot2)
pl = ggplot(dplyr::tibble(x=c(0,5,10),y=c(0,0.5,0.75)), aes(x=x,y=y)) + 
geom_point() + 
scale_y_continuous(limits=c(0,1), labels=scales::percent)

ply = plotly::ggplotly(pl)

tip = ply$x$data[[1]]$text
tip = do.call('c', lapply(strsplit(tip, 'y:'), function(x){paste0(x[1], 'y:',paste0(x[2], '%'))}  ))
ply$x$data[[1]]$text = tip

Редактировать - поместить его в функцию

prc_ggplotly = function(pl = ggplot2::last_plot(), i = 1)
{
  ply = plotly::ggplotly(pl)

  if(any(grepl('%', ply$x$layout$yaxis$ticktext)))
  {
    tip = ply$x$data[[i]]$text
    tip = do.call('c', lapply(strsplit(tip, 'y:'), function(x) {paste0(x[1], 'y:',paste0(x[2], '%'))}  ))
    ply$x$data[[i]]$text = tip
  }

  if(any(grepl('%', ply$x$layout$xaxis$ticktext)))
  {
    tip = ply$x$data[[i]]$text
    tip = do.call('c', lapply(strsplit(tip, '<'), function(x) { paste0(paste0(x[1], '%'), '<', x[2])}  ))
    ply$x$data[[i]]$text = tip
  }

  return(ply)
}

Надеюсь, это поможет

...