【问题标题】:R: How to stop rounding percentages to 0 decimal places on plotly chart?R:如何停止在绘图图表上将百分比四舍五入到小数点后 0 位?
【发布时间】:2021-09-01 13:19:02
【问题描述】:

我正在尝试向我闪亮的仪表板添加一个绘图。 y 轴变量是一个比例,我想将其格式化为百分比。我发现我可以使用布局的 yaxis 设置中的 tickformat 功能来做到这一点。但是,由于我图表中的百分比都很低,我注意到了一些怪癖。

首先,当您将鼠标悬停在数据点上时,y 轴和实际值都四舍五入到小数点后 0 位。因此,例如 0.0287 和 0.275 都显示为 0.3,即使它们在图表上的实际位置略有不同,反映了真正的潜在价值。

其次,当y轴范围这么小,并且默认也是小数点后0位时,在多个tick处显示相同的值,tick的间隔也不直观。

我在下面提供了示例代码,改编自 plotly 网站上的示例。 (我只是将值更改为更小的值)。

您可以看到它生成的图表给出了刻度线显示 2%、3%、3%、4%、4%、5%、5%、5%、6%。第一个问题是它具有误导性,其次你可以看到那里有 3x 5%,但只有 2x 其他的,所以看起来它甚至没有像 4.5%、5%、5.5% 等那样做一个合理的差距,但是而是基于数据值的不直观的东西。

library(plotly)

fig <- plot_ly(
  type = "scatter",
  x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), 
  y = c(0.0185, 0.0382, 0.0561, 0.0463, 0.0596, 0.048, 0.0287, 0.0275, 0.0243, 0.0429, 0.0450, 0.0391), 
  mode = "markers+lines") 
fig <- fig %>%
  layout(
    yaxis = list(
      tickformat = "%"
    ))

fig

总结:

我该如何...

  1. 指定如何对百分比进行四舍五入?
  2. 确保它不会以相同的舍入值出现多次的间隔间隔刻度线?
  3. 确保在查看小数位时选择直观的刻度间隔(例如 0.5 或 0.25,而不是像 0.37 这样愚蠢的值)

【问题讨论】:

    标签: r plotly rounding yaxis rounding-error


    【解决方案1】:

    另一种方法是手动指定tickvals并格式化ticktext

    library(plotly)
    
    fig <- plot_ly(
      type = "scatter",
      x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), 
      y = c(0.0185, 0.0382, 0.0561, 0.0463, 0.0596, 0.048, 0.0287, 0.0275, 0.0243, 0.0429, 0.0450, 0.0391), 
      mode = "markers+lines") 
    fig <- fig %>%
      layout(
        yaxis = list(
          tickvals=seq(0,max(y),.005),ticktext=paste0(seq(0,max(y),.005)*100,"%")
        ))
    
    fig
    

    【讨论】:

      【解决方案2】:

      在您的情况下,使用 tickformat = ".2%" 将解决(1. 和 2.)。

      明确定义tickvals(例如tickvals = seq(.02,.06, .01))将回答 (3.)。

      更多参数见https://plotly.com/r/reference/#Layout_and_layout_style_objects

      简单来说,你可以试试:

        layout(
          yaxis = list(
            tickformat = ".1%",
            tickvals = seq(.02,.06, .005)
          ))
      

      例如,或根据自己的喜好进行修改。

      【讨论】:

      • 工作就像一个魅力。它似乎默认使用合理的间隔。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多