JuliaPlots/UnicodePlots.jl

log transformed bins in `histogram`

Open

#348 aperta il 10 apr 2023

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)Julia (84 fork)batch import
enhancementhelp wanted

Metriche repository

Star
 (1528 star)
Metriche merge PR
 (Merge medio 1h 29m) (1 PR mergiata in 30 g)

Descrizione

I want to create an histogram for a vector like this:

using UnicodePlots
using Random

Random.seed!(1234)
a = rand(1:5) .^ (0:0.1:5)
histogram(a)
                ┌                                        ┐
   [ 0.0,  5.0)   ┤████████████████████████████████████  24
   [ 5.0, 10.0)  ┤███████████████  10
   [10.0, 15.0) ┤█████████  6
   [15.0, 20.0) ┤██████  4
   [20.0, 25.0) ┤████▌ 3
   [25.0, 30.0) ┤████▌ 3
   [30.0, 35.0) ┤█▌ 1
                └                                        ┘
                                 Frequency

Since the variable is exponential, log transforming it would be more appropriate:

histogram(log10.(a))
              ┌                                        ┐
   [0.0, 0.5) ┤█████████████████████████████████████  8
   [0.5, 1.0) ┤████████████████████████████████▍ 7
   [1.0, 1.5) ┤████████████████████████████████▍ 7
   [1.5, 2.0) ┤████████████████████████████████▍ 7
   [2.0, 2.5) ┤█████████████████████████████████████  8
   [2.5, 3.0) ┤████████████████████████████████▍ 7
   [3.0, 3.5) ┤████████████████████████████████▍ 7
              └                                        ┘
                               Frequency

But I was wondering if there was a way to do it so I do not need to log transform the variable myself. Something that looked like this (notice the bin labels):

              ┌                                        ┐
   [10^0, 10^0.5)    ┤█████████████████████████████████████  8
   [10^0.5, 10^1.0) ┤████████████████████████████████▍ 7
   [10^1.0, 10^1.5) ┤████████████████████████████████▍ 7
   [10^1.5, 10^2.0) ┤████████████████████████████████▍ 7
   [10^2.0, 10^2.5) ┤█████████████████████████████████████  8
   [10^2.5, 10^3.0) ┤████████████████████████████████▍ 7
   [10^3.0, 10^3.5) ┤████████████████████████████████▍ 7
              └                                        ┘
                               Frequency

I tried it with

histogram(a, yscale=:log10)
histogram(a, yscale=x->log10(x))

Interestingly the plot was created as if the yscale argument was not set, which to me was misleading. I think this should either throw an error or the behaviour should be to create logarithmic bins?

This should also probably throw an error:

histogram(a, yscale=:hello)

Guida contributor