For very heavy tails, both positive and negative, I sometimes like to see all the data on the graph without hiding the structure in a single interval.
When plotting using Matplotlib in Python, I can do this by selecting a character scale that uses a logarithmic transformation outside some interval and linear plotting inside it.
Earlier in R, I built this behavior by converting data using arcsinh on a one-time basis. However, tag labels, etc. It is very difficult to do it right (see below). 
Now I came across a bunch of data, where a subset in a grid or ggplot would be very convenient. I donβt want to use Matplotlib because of the subset, but Iβm sure Iβm missing a symbol!
Edit:
I see that ggplot uses a package called scales , which solves a lot of this problem (if it works). Automatic selection of labeling and label placement still looks rather complicated, albeit beautiful. Perhaps some combination of log_breaks and cbreaks ?
Edit 2:
The following code is not too bad
sinh.scaled <- function(x,scale=1){ sinh(x)*scale } asinh.scaled <- function(x,scale=1) { asinh(x/scale) } asinh_breaks <- function (n = 5, scale = 1, base=10) { function(x) { log_breaks.callable <- log_breaks(n=n,base=base) rng <- rng <- range(x, na.rm = TRUE) minx <- floor(rng[1]) maxx <- ceiling(rng[2]) if (maxx == minx) return(sinh.scaled(minx, scale=scale)) big.vals <- 0 if (minx < (-scale)) { big.vals = big.vals + 1 } if (maxx>scale) { big.vals = big.vals + 1 } brk <- c() if (minx < (-scale)) { rbrk <- log_breaks.callable( c(-min(maxx,-scale), -minx ) ) rbrk <- -rev(rbrk) brk <- c(brk,rbrk) } if ( !(minx>scale | maxx<(-scale)) ) { rng <- c(max(minx,-scale), min(maxx,scale)) minc <- floor(rng[1]) maxc <- ceiling(rng[2]) by <- floor((maxc - minc)/(n-big.vals)) + 1 cb <- seq(minc, maxc, by = by) brk <- c(brk,cb) } if (maxx>scale) { brk <- c(brk,log_breaks.callable( c(max(minx,scale), maxx ))) } brk } } asinh_trans <- function(scale = 1) { trans <- function(x) asinh.scaled(x, scale) inv <- function(x) sinh.scaled(x, scale) trans_new(paste0("asinh-", format(scale)), trans, inv, asinh_breaks(scale = scale), domain = c(-Inf, Inf)) }