ggplotly中y轴刻度以百分比显示

3

我正在使用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

您可以通过以下方式访问工具提示文本:

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)
}

希望这能帮到你。

太好了!不过我希望能有一个更简单直接的解决方案。如果您可以将代码封装,那么您可以将其作为一个拉取请求提交,因为我认为这是一件非常方便的事情。 - Dan Chaltiel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接