Skip to content

Applying color gradients to columns

Numeric trends in larger tables can quickly become difficult to see. Adding color to reveal these trends can be one way to make reading complex tables a little easier.

Excuse the contrived nature of the data below, but I really want to make a rainbow gradient!

julia
using StyledTables, DataFrames, Colors

df = DataFrame(id = 1:8, score = rand(8))
8×2 DataFrame
Rowidscore
Int64Float64
110.0699432
220.962072
330.905078
440.0294121
550.354725
660.999883
770.634254
880.348413

So far so boring.

The gradient we'll be applying is the following:

julia
colors = range(HSV(0,1,1), stop = HSV(-360,1,1), length = nrow(df))

Step 1: Styling function

The function below is more general than what would be required for the specific example here. In our case, it would be possible to simply use the id variable to index into colors.

julia
function apply_gradient(x, xmax; colors)
    color = colors[round(Int, (x / xmax) * length(colors))]
    return (; color)
end
apply_gradient (generic function with 1 method)

Step 2: Apply styling

julia
tbl = StyledTable(df)
style!(x -> apply_gradient(x, maximum(df.id); colors), tbl, :id)
render(tbl)
id score
1 0.0699
2 0.962
3 0.905
4 0.0294
5 0.355
6 1
7 0.634
8 0.348

Step 3: Column labels

julia
relabel!(tbl, :id => "Student ID", :score => "Score")
render(tbl)
Student ID Score
1 0.0699
2 0.962
3 0.905
4 0.0294
5 0.355
6 1
7 0.634
8 0.348