Julia에서 색상을 점차적으로 변경하면서 플롯하는 방법
하고 싶은 일
그래프를 복수 같은 캔버스(figure 쪽이 적절?)에 그릴 때, 각각의 선의 색을 바꾸고 싶네요.
일반적으로 Python과 Julia는 자동으로 색상을 변경하지만 깨끗한 그라데이션으로 조금씩 변경하면 깨끗합니다.
그래서, 그 방법은 python이라고 간단하게 찾을 수 있습니다만, Julia라고 좀처럼 발견되지 않았기 때문에, 기사로 하려고 하는 것입니다.
문제 설정
f(x) = x^{n}, n = 1, 2, 3\cdots 10, x \in [-1, 1]
를 플롯하고 싶습니다. 단,
f(x) = x^{n}, n = 1, 2, 3\cdots 10, x \in [-1, 1]
하자.
궁극적으로 이런 음모가 생기면 목표입니다.
파이썬이라면
Python(정확하게는 matplotlib)이라면 다음과 같이 거는다.
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import cm
x = np.linspace(-1,1,100)
N_max = 10
for n in range(1,N_max+1,1):
y = x**n
color = cm.viridis(float(n/N_max))
plt.plot(x,y, color=color, label = 'x to the {}th'.format(n))
plt.legend(loc=0)
포인트는 변화하는 지수 $n$를 $N_max$로 나눈 값을, 컬러맵 스킴에 인수로서 건네주는 곳이라고 생각한다.
color = cm.viridis(0~1のfloatを与える)
이렇게 하면 지정한 컬러맵 방식 중에서 색을 0~1의 스칼라 값으로 픽업할 수 있다.
줄리아라면
Julia(여기서는 Plots+GR이나 Plotly를 상정)라면 조금 어렵게 된다.
왜냐하면, 컬러맵 스킴에 인수로서 0~1의 float를 건네줄 수 없기 때문이다.
일단, 컬러맵 스킴은
c=:[なにかのscheme]
로 건네줄 수 있는 것 같기 때문에, 시험해 본다.# cを指定
# 違う、そうじゃない
x = LinRange(-1,1,100)
p = plot()
N_max = 10
for n in 1:N_max
y = map(xx-> xx^n, x)
p = plot!(p,x,y,
c=:viridis,
label= string("x to the ", n,"th" ),
legend=:bottomright)
end
display(p)
색이 전부 친숙해져 버렸다(´;ω;`)
해결책
이 Example 이 해결책이었습니다.
아까 해결책을 쓰자.
# cgradをうまくつかうのか〜
x = LinRange(-1,1,100)
p = plot()
N_max = 10
#ここで色の候補を作っておく
C(g::ColorGradient) = RGB[g[z] for z=LinRange(0,1,N_max)]
# colormap schemeの指定
g = :viridis
# 色のリスト作成(パイプ使用)
colorlist = cgrad(g) |> C
for n in 1:N_max
y = map(xx-> xx^n, x)
p = plot!(p,x,y, c=colorlist[n], # ここで色をピックアップ
label= string("x to the ", n,"th" ), legend=:bottomright)
end
display(p)
했어.
뭐하는 거야
뭐하고 있을까.
정직한 이야기,
#ここで色の候補を作っておく
C(g::ColorGradient) = RGB[g[z] for z=LinRange(0,1,N_max)]
무슨 일이 일어나고 있는지 잘 모르겠습니다.
함수 C를 RGB의 리스트로서 정의하고 있습니다만, 그 안에 ColorGradient형의 g가 있어, 그 슬라이스로서 z가 사용되고 있어,,,
솔직히 잘 모르겠다 ¯_(츠)_/¯
다만, 기능으로서는 「지정의 컬러 맵(
g
)을 N_max 분할해, 그 리스트를 만드는 함수를 작성」같은 일을 하고 있다.포인트는 이 함수의 인수에 직접 g를 지정하고 있는 것이 아니라,
cgrad
함수의 반환값을 넣는 것이다.# colormap schemeの指定
g = :viridis
# 色のリスト作成(パイプ使用)
colorlist = cgrad(g) |> C
여기에서는 실제로 컬러맵 스킴을 지정해, 색의 리스트를 실제로 작성하고 있다.
|>
는 소위 파이프인 것에 주의. 함수 C의 인수로 cgrad(g)
의 값이 들어 있습니다.마지막으로
Matplotlib라면 할 수 있는데···라고 하는 때에는, Backend로서
PyPlot
사용하는 손도 있는 것이고, 아무래도 필요라고 하는 것은 아닐지도 모르고, 잘 모르지만, 우선 할 수 있었기 때문에 요시!
Reference
이 문제에 관하여(Julia에서 색상을 점차적으로 변경하면서 플롯하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zvillage/items/fa1b63424b310a27cbf6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)