简体   繁体   English

y 轴比例作为 ggplotly 中的百分比

[英]y-axis scale as percents in ggplotly

I'm using scale_y_continuous to format my y-axis in percentage:我正在使用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()

However, how can I keep this format in the plotly tooltip (which shows y as floats)?但是,如何在plotly工具提示中保留这种格式(将y显示为浮点数)?

You can access the tooltip text as您可以访问工具提示文本

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

So the code below might be useful所以下面的代码可能有用

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

Edit - put it in a function编辑 - 把它放在一个函数中

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

Hope this helps希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM