Another customisable approach that you can explore is to simply divide all values by the maximum value and take it to the power of a positive shape value ($\gamma$) that best satisfies your desired tranformation objectives. See example below in R in which the dashed line is the simple case of dividing x
by max(x)
:
scaled_power_transform <- function(x, gamma=0.25)
{
## x must be nonnegative
stopifnot(all(x >= 0))
## scale to [0, 1]
x_scaled <- x / max(x)
## customise the shape
x_scaled <- x_scaled^gamma
return(invisible(x_scaled))
}
x <- seq(0, 1000)
plot(x = x, y = scaled_power_transform(x, gamma = 0.1), col = 'blue',
type = 'l', lwd = 2, ylab = 'x transformed')
lines(x, x/max(x), lty = 2)
lines(x = x, y = scaled_power_transform(x, gamma = 0.5), col = 'green',
type = 'l', lwd = 2)
lines(x = x, y = scaled_power_transform(x, gamma = 2), col = 'red',
type = 'l', lwd = 2)
legend(x = 0.6*max(x), y=0.3,
legend = c(expression(paste(gamma,'= 0.1')),
expression(paste(gamma,'= 0.5')),
expression(paste(gamma,'= 2.0'))),
pch = rep('*', 3), col = c('blue', 'green', 'red'))

Created on 2020-10-10 by the reprex package (v0.3.0)