如何格式化 R Plotly 轴以显示以千兆字节而不是数十亿为单位的刻度?

问题描述 投票:0回答:1

我正在制作一个条形图,表示每个月初的数据库大小。请参阅下面我的代码的简化:

library(plotly)

fig <-
  plot_ly(type = 'bar',
          x = ~c('2024-01-01', '2024-02-01', '2024-03-01', '2024-04-01'),
          y = ~c(50000000000, 150000000000, 250000000000, 450000000000)) %>%
  layout(
    xaxis = list(
      title = 'Date'),
    yaxis = list(
      title = 'DB Size'
      )
    )

fig

我得到以下图表:

enter image description here

现在我希望我的 y 轴显示千兆字节而不是数十亿字节。我可以使用“数组”

tickmode
方法并手动分配
ticktext
tickvals
来完成,如下所示:

library(plotly)

fig <-
  plot_ly(type = 'bar',
          x = ~c('2024-01-01', '2024-02-01', '2024-03-01', '2024-04-01'),
          y = ~c(50000000000, 150000000000, 250000000000, 450000000000)) %>%
  layout(
    xaxis = list(
      title = 'Date'),
    yaxis = list(
      title = 'DB Size',
      ticktext = list('100G', '200G', '300G', '400G'),
      tickvals = list(100000000000, 200000000000, 300000000000, 400000000000),
      tickmode = 'array'
    )
  )

fig

我得到了我想要的:

enter image description here

但是,数据库大小可能会发生巨大变化。因此,我不想对我的刻度值和标签进行硬编码。有没有一种方法可以以编程方式更改刻度格式,例如

tickformat
?如果是这样,字节、千兆字节、太字节表示法的
tickformat
代码是什么?在哪里可以找到常见
tickformat
代码的列表?如果
tickformat
不是可行的方法,我可以使用哪些其他方法来实现上面的图形,而无需手动分配刻度标签?谢谢。

r plotly
1个回答
0
投票

这是一种选择,使用基本 R 的

pretty
创建中断,并使用
scales
函数的
label_bytes
包:

yvals <- c(50000000000, 150000000000, 250000000000, 450000000000)
tv <- pretty(yvals)
tx <- scales::label_bytes()(tv)

fig <-
  plot_ly(type = 'bar',
          x = ~c('2024-01-01', '2024-02-01', '2024-03-01', '2024-04-01'),
          y = ~yvals) %>%
  layout(
    xaxis = list(
      title = 'Date'),
    yaxis = list(
      title = 'DB Size',
      ticktext = tx,
      tickvals = tv,
      tickmode = 'array'
    )
  )

barplot with y-axis in GB

适用于各种尺寸:

yvals <- c(10000000, 15000000, 25000000, 45000000)

barplot with y-axis in MB

© www.soinside.com 2019 - 2024. All rights reserved.