회귀 곡선과의 거리에 따른 점 색칠
11590 단어 파이썬Python3matplotlib
목적
플롯하는 점의 색, 농도를 바꾼다.
코드
example.pyimport numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set() #図がきれいに描画出来るおまじないらしい、私はいつも使っている
amp = 100 #振幅
frequency = 0.02 #周波数
offset = 1000 #オフセット
t = np.linspace(0,100,1000)
y_ = amp*np.sin(2*np.pi*frequency*t)+offset #理論値=回帰曲線sin
y = np.random.poisson(y_) #観測値=誤差付きsin
###メイン###
dis = abs( y_ - y )/ y_.max() #理論値と観測値の差を0.0~1.0の値にスケーリング
color_list=[ [1-9*i,0,i*9,i*5] for i in dis ] #RGBの値で色を指定
f = plt.figure(figsize = (12,6))
f.add_subplot(121)
plt.scatter(t,y_)
plt.xlabel('t')
plt.ylabel('y')
f.add_subplot(122)
plt.scatter(t,y,color = color_list)
plt.xlabel('t')
plt.ylabel('y')
결과
해설
우선, 데이터에 대해서이지만, 각 시각의 sin파의 값을 np.random.poisson(y_)
에 대입하는 것으로,
y는 오차가 평균 y_ 인 poisson 분포를 따르는 sin 파입니다. 따라서 큰 값에서는 오차가 커지고 작은 값에서는 오차가 작습니다.
이번 메인 그라데이션은 보시다시피 for 문을 사용하여 색상을 지정하고 있습니다. matplotlib에서는 색 지정을 [R, G, B, 농도] = [r, g, b, c]로 지정할 수 있습니다. 다만, r, g, b, c는 0.0~1.0의 값을 취한다.
이 구조를 이용하여 근거리에서는 색이 얇고 원거리에서는 진해지도록 사칙연산을 했다.
이번 예에서는 근거리에서는 얇은 빨강, 원거리에서는 짙은 청색으로 되어 있다.
주의점
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set() #図がきれいに描画出来るおまじないらしい、私はいつも使っている
amp = 100 #振幅
frequency = 0.02 #周波数
offset = 1000 #オフセット
t = np.linspace(0,100,1000)
y_ = amp*np.sin(2*np.pi*frequency*t)+offset #理論値=回帰曲線sin
y = np.random.poisson(y_) #観測値=誤差付きsin
###メイン###
dis = abs( y_ - y )/ y_.max() #理論値と観測値の差を0.0~1.0の値にスケーリング
color_list=[ [1-9*i,0,i*9,i*5] for i in dis ] #RGBの値で色を指定
f = plt.figure(figsize = (12,6))
f.add_subplot(121)
plt.scatter(t,y_)
plt.xlabel('t')
plt.ylabel('y')
f.add_subplot(122)
plt.scatter(t,y,color = color_list)
plt.xlabel('t')
plt.ylabel('y')
우선, 데이터에 대해서이지만, 각 시각의 sin파의 값을
np.random.poisson(y_)
에 대입하는 것으로,y는 오차가 평균 y_ 인 poisson 분포를 따르는 sin 파입니다. 따라서 큰 값에서는 오차가 커지고 작은 값에서는 오차가 작습니다.
이번 메인 그라데이션은 보시다시피 for 문을 사용하여 색상을 지정하고 있습니다. matplotlib에서는 색 지정을 [R, G, B, 농도] = [r, g, b, c]로 지정할 수 있습니다. 다만, r, g, b, c는 0.0~1.0의 값을 취한다.
이 구조를 이용하여 근거리에서는 색이 얇고 원거리에서는 진해지도록 사칙연산을 했다.
이번 예에서는 근거리에서는 얇은 빨강, 원거리에서는 짙은 청색으로 되어 있다.
주의점
응용
이번 색 지정은 회귀 곡선으로부터의 거리를 다른 도면에서도 가시화할 수 있다.
방금 전의 코드를 조금 변경해, 시간이 진행됨에 따라 오차가 커지는 경우를 생각한다. (코드는 후술)
가로축 t, 세로축 y, 가로축 y_, 세로축 y의 그림을 고려하면,
왼쪽 그림에서 한눈에 거리(오차)의 증가를 확인할 수 있다. 오른쪽 그림에서 y와 y_의 거리는 y_와의 상관이 있음을 알 수 있습니다.
따라서 플롯 할 축을 변경하면 데이터에 대한 이해를 더욱 향상시킬 수 있습니다.
관측치 y를 결정하는 파라미터가 많아지면, 보다 다양한 견해를 즐길 수 있다.
변경 코드
example2.py
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
amp=100 #振幅
frequency=0.02 #周波数
offset=1000 #バイアス
t=np.linspace(0,100,1000)
y_=amp*np.sin(2*np.pi*frequency*t)+offset
y=np.random.poisson(y_+2.6*t) ###変更行###
dis=abs(y_-y)/y_.max()
color_list=[[1-3*i,0,3*i,i] for i in dis] ###変更行###
f=plt.figure(figsize=(12,6))
f.add_subplot(121)
plt.scatter(t,y,color=color_list)
plt.xlabel('t')
plt.ylabel('y')
f.add_subplot(122)
plt.scatter(y_,y,color=color_list)
plt.xlabel('y_')
plt.ylabel('y')
추가분
시간과 이론값 y_의 비교
접힌 색의 농도는 아마 점의 고밀도 때문입니다.
Reference
이 문제에 관하여(회귀 곡선과의 거리에 따른 점 색칠), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yu_og/items/e200d4b2612752de0389
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
amp=100 #振幅
frequency=0.02 #周波数
offset=1000 #バイアス
t=np.linspace(0,100,1000)
y_=amp*np.sin(2*np.pi*frequency*t)+offset
y=np.random.poisson(y_+2.6*t) ###変更行###
dis=abs(y_-y)/y_.max()
color_list=[[1-3*i,0,3*i,i] for i in dis] ###変更行###
f=plt.figure(figsize=(12,6))
f.add_subplot(121)
plt.scatter(t,y,color=color_list)
plt.xlabel('t')
plt.ylabel('y')
f.add_subplot(122)
plt.scatter(y_,y,color=color_list)
plt.xlabel('y_')
plt.ylabel('y')
시간과 이론값 y_의 비교
접힌 색의 농도는 아마 점의 고밀도 때문입니다.
Reference
이 문제에 관하여(회귀 곡선과의 거리에 따른 점 색칠), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yu_og/items/e200d4b2612752de0389텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)