R:如何停止在图表上将百分比四舍五入到小数点后 0 位?
R: How to stop rounding percentages to 0 decimal places on plotly chart?
我正在尝试向我闪亮的仪表板添加一个图表。 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
总结:
我该如何...
- 指定如何对百分比进行四舍五入?
- 确保它不会 space 以相同的舍入值出现不止一次的间隔进行标记?
- 确保它在查看小数位时选择直观的刻度间隔(例如 0.5 或 0.25,而不是像 0.37 这样愚蠢的东西)
使用 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)
))
例如,或根据您的喜好进行修改。
另一种方法是手动指定 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
要回答第二点,请参阅 https://plotly.com/r/tick-formatting/#tickformatstops-to-customize-for-different-zoom-levels,其中演示了如何为不同的缩放级别指定不同的数字格式。
您将在下面找到针对您的特定问题修改的代码。
library(plotly)
fig <- plot_ly(
type = "scatter",
x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13),
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, .5),
mode = "markers+lines")
fig <- fig %>%
layout(
yaxis = list(
tickformatstops = list(
list(dtickrange = list(0, 0.009), value = '.2%'),
list(dtickrange = list(0.009, 0.09),value = '.1%'),
list(dtickrange = list(0.09, 1), value = '.0%'))
)
)
fig
我正在尝试向我闪亮的仪表板添加一个图表。 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
总结:
我该如何...
- 指定如何对百分比进行四舍五入?
- 确保它不会 space 以相同的舍入值出现不止一次的间隔进行标记?
- 确保它在查看小数位时选择直观的刻度间隔(例如 0.5 或 0.25,而不是像 0.37 这样愚蠢的东西)
使用 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)
))
例如,或根据您的喜好进行修改。
另一种方法是手动指定 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
要回答第二点,请参阅 https://plotly.com/r/tick-formatting/#tickformatstops-to-customize-for-different-zoom-levels,其中演示了如何为不同的缩放级别指定不同的数字格式。
您将在下面找到针对您的特定问题修改的代码。
library(plotly)
fig <- plot_ly(
type = "scatter",
x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13),
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, .5),
mode = "markers+lines")
fig <- fig %>%
layout(
yaxis = list(
tickformatstops = list(
list(dtickrange = list(0, 0.009), value = '.2%'),
list(dtickrange = list(0.009, 0.09),value = '.1%'),
list(dtickrange = list(0.09, 1), value = '.0%'))
)
)
fig