줄리아의 색상 처리를 위한 패키지
개요1
줄리아에서 색상 처리를 위한 패키지인 Colors.jl
의 기능에 대해서 소개한다. 시각화 패키지인 Plots.jl
을 사용하는 경우에는 Colors.jl
을 따로 불러올 필요 없이 사용가능하다. 다음의 기능을 제공한다.
- 색 파싱 및 변환
- 색 지도(colormap)
- 색 스케일(colorscale)
파싱 및 변환
str
을 색에 대한 정보를 표현한 문자열이라 할 때, @colorant_str
혹은 parse(Colorant, str)
를 통해 문자열을 특정 색 공간의 색상 코드로 파싱할 수 있다. 참고로 colorant는 염색제, 색소 등의 뜻을 가진 영단어이다.
julia> using Colors
julia> colorant"red"
RGB{N0f8}(1.0,0.0,0.0)
julia> colorant"rgb(255, 0, 0)"
RGB{N0f8}(1.0,0.0,0.0)
julia> parse(Colorant, "rgba(0, 255, 0, 0.5)")
RGBA{N0f8}(0.0,1.0,0.0,0.502)
julia> parse(Colorant, "#FF0000")
RGB{N0f8}(1.0,0.0,0.0)
julia> parse(Colorant, "hsl(120, 100%, 25%)")
HSL{Float32}(120.0f0,1.0f0,0.25f0)
convert()
함수로 다른 색 공간의 색상 코드로 변환할 수 있다.
julia> convert(RGB, HSL(270, 0.5, 0.5))
RGB{Float64}(0.5,0.25,0.75)
색 보간
range()
함수를 통해 색을 보간interpolation할 수 있다. 이렇게 작동하는 것은 매우 상식적이고 직관적인데, 예로 RGB 코드를 생각해보자. 빨강은 RGB 코드로 $(255, 0, 0)$ 혹은 $(1, 0, 0)$으로 표현되고, 이는 사실상 3차원 벡터와 같다. 따라서 두 벡터 사이를 보간해주는 range()
함수의 인수로 색상 코드를 쓰지 못할 이유가 없다.
julia> v1 = [1.0, 0.0, 0.0];
julia> v2 = [0.0, 0.5, 0.0];
julia> collect(range(v1, v2, length = 15))
15-element Vector{Vector{Float64}}:
[1.0, 0.0, 0.0]
[0.9285714285714286, 0.03571428571428571, 0.0]
[0.8571428571428572, 0.07142857142857142, 0.0]
[0.7857142857142857, 0.10714285714285714, 0.0]
[0.7142857142857143, 0.14285714285714285, 0.0]
[0.6428571428571428, 0.17857142857142858, 0.0]
[0.5714285714285714, 0.21428571428571427, 0.0]
[0.5, 0.25, 0.0]
[0.4285714285714286, 0.2857142857142857, 0.0]
[0.3571428571428571, 0.32142857142857145, 0.0]
[0.2857142857142857, 0.35714285714285715, 0.0]
[0.2142857142857143, 0.39285714285714285, 0.0]
[0.1428571428571429, 0.42857142857142855, 0.0]
[0.0714285714285714, 0.4642857142857143, 0.0]
[0.0, 0.5, 0.0]
julia> c1 = colorant"rgb(255, 0, 0)"
RGB{N0f8}(1.0,0.0,0.0)
julia> c2 = colorant"rgb(0, 128, 0)"
RGB{N0f8}(0.0,0.502,0.0)
julia> range(colorant"rgb(255,0,0)", colorant"rgb(0,128,0)", length=15)
15-element Array{RGB{N0f8},1} with eltype RGB{FixedPointNumbers.N0f8}:
RGB{N0f8}(1.0,0.0,0.0)
RGB{N0f8}(0.929,0.035,0.0)
RGB{N0f8}(0.859,0.071,0.0)
RGB{N0f8}(0.784,0.11,0.0)
RGB{N0f8}(0.714,0.145,0.0)
RGB{N0f8}(0.643,0.18,0.0)
RGB{N0f8}(0.573,0.216,0.0)
RGB{N0f8}(0.502,0.251,0.0)
RGB{N0f8}(0.427,0.286,0.0)
RGB{N0f8}(0.357,0.322,0.0)
RGB{N0f8}(0.286,0.357,0.0)
RGB{N0f8}(0.216,0.392,0.0)
RGB{N0f8}(0.141,0.431,0.0)
RGB{N0f8}(0.071,0.467,0.0)
RGB{N0f8}(0.0,0.502,0.0)
위의 색 레인지에 대한 시각화는 VS Code에서 줄리아 익스텐션을 설치하고 실행해보면 다음과 같이 얻을 수 있다.
또란 range()
의 반환은 팔레트로 사용할 수 있다.
my_palette = range(colorant"rgb(255,0,0)", colorant"rgb(0,128,0)", length=15)
plot(rand(10, 15), palette = my_palette)
환경
- OS: Windows11
- Version: Julia 1.9.4, Plots v1.39.0, Colors v0.12.10