2014-07-21 1 views
3

특정 점 (예 : [1,2])을 중심으로 특정 데이터 점의 색상을 설정하여 그래프에서 [1,2]와 같이 데이터 포인트가 멀어 질수록 중심점에서부터 색상을 바꾸기 시작합니다. 따라서이 지점에서 데이터 포인트가 하나의 색상 인 반경 등이 있습니다.미리 지정된 점에서 방사형으로 데이터 점 색상이 변경됨

내가 특별히 추적 16 진수 색상 코드로 열지도 만들 싶습니다

FF0088, FF0099, FF00AA 및 660,088, 660,099을, 6600AA

또한 중 하나를 별개의 색상 변경을하고 싶습니다 경계선의 측면.

import numpy as np 
import matplotlib.pyplot as plt 

data_dC = [ 
     [1.29940,-0.06908,0.85295,-0.32388,0.51436,0.00408,-0.83824,-0.11374,0.04466], 
     [0.93471,0.10030,1.25981,-0.11888,1.35810,-0.12869,-1.47697,0.02932,0.07098], 
     [0.57901,0.25031,1.77954,-0.34448,0.94303,-0.20675,-1.28751,0.23731,0.01300], 
     [0.51240,0.53625,3.43752,-0.21142,0.83936,0.19316,-1.05078,0.29039,0.24586], 
     [0.23750,0.81001,6.45671,-0.21533,0.50952,-0.09047,-0.72484,0.62434,0.18567], 
     [0.68737,0.38333,2.41730,-0.32624,0.87260,-0.00159,-1.19884,0.16281,0.22052], 
     [0.61870,0.16834,1.47348,-0.18783,0.55844,0.33093,-0.74627,0.20852,-0.04018], 
     [2.05987,-0.36247,0.43404,-0.21760,0.95765,0.04392,-1.17525,-0.31384,-0.04863], 
     [0.32613,0.18240,1.52197,-0.30043,1.00514,-0.00491,-1.30558,0.48662,-0.30421], 
     [0.90927,-0.16005,0.69175,-0.26315,1.19294,-0.02365,-1.45609,0.04131,-0.20136], 

def log_OIII_OII_OI(log_OI_Ha, eps=0): 
    return ((-1.701)*(log_OI_Ha))-2.163 

OI2 = np.linspace(-2.50000, 0.00000) 

data_dC = np.array(data_dC) 

log_OIHa_dC = data_dC[:, 6] 
log_OIIIOII_dC = data_dC[:, 7] 

base_point = (-1.4, -0.8) 

def boundary_x(x): 
    return ((-1.701)*(x))-2.163 

def myDistance(log_OIHa_dC, log_OIIIOII_dC, base): 
return np.sqrt((log_OIHa_dC - base[0])**2 + (log_OIIIOII_dC - base[1])**2) 

dist = myDistance(log_OIHa_dC, log_OIIIOII_dC, base_point) 

fig, ax = plt.subplots() 
ax.plot(OI2, log_OIII_OII_OI(OI2), '-k') 
ax.set_yticks([-1.5,-1.0,-0.5,0.0,0.5]) 
ax.set_xlim(-2.5, 0.0) 
ax.set_ylim(-1.5, 1.0) 

ax.plot(base_point[0], base_point[1], 'ko') 
ax.scatter(log_OIHa_dC[log_OIHa_dC >= boundary_x(x)], log_OIIIOII_dC[log_OIHa_dC >=  boundary_x(x)], c=dist[log_OIHa_dC >= boundary_x(x)], cmap=plt.cm.Blues) 
ax.scatter(log_OIHa_dC[log_OIHa_dC < boundary_x(x)], log_OIIIOII_dC[log_OIHa_dC < boundary_x(x)], c=dist[log_OIHa_dC < boundary_x(x)], cmap=plt.cm.Reds) 

그래서 본질적으로이 경계 라인의 오른쪽 상단에 나는 진수 색상 660088, 660099, 6600AA 내가 FF0088, FF0099, FF00AA 싶습니다 그것의 왼쪽 아래에 부탁합니다.

경계선의 왼쪽 아래 점은 [-1.4, -0.8]이고 경계선 오른쪽 위는 [-0.9,0.2]입니다.

답변

4

ax.scatter을 사용하고 포인트에서 거리에 따라 색상을 공급해야합니다. numpy의 멋진 색인 생성을 사용하여 기준에 따라 항목을 선택할 수도 있습니다 (예 : 경계선). 당신은 당신이보고 싶은 무엇의 예 이미지가 포함되어 있지 않습니다

, 그래서 여기에 기본 조립 이러한 개념의 예입니다 :

import numpy as np 
import matplotlib.pyplot as plt 
np.random.seed(0) 
%matplotlib inline 

def myBoundary(x, y0=0, slope=1): 
    return y0 + x * slope 

def myDistance(x, y, base_x, base_y): 
    return np.sqrt((x - base_x)**2 + (y - base_y)**2) 

x = np.random.normal(size=137) 
y = np.random.normal(size=137) 

y_boundary = myBoundary(x) 

base_x, base_y = (-1.4, -0.8) 

dist = myDistance(x, y, base_x, base_y) 

fig, ax = plt.subplots() 
ax.scatter(x[y >= y_boundary], y[y >= y_boundary], c=dist[y >= y_boundary], cmap=plt.cm.Blues_r) 
ax.scatter(x[y < y_boundary], y[y < y_boundary], c=dist[y < y_boundary], cmap=plt.cm.Reds_r) 
ax.plot(x, y_boundary, linestyle='-', linewidth=2, marker=None, color='k', alpha=0.65) 
ax.plot(base_x, base_y, 'g*', alpha=0.65, markersize=10) 

그리고 밖으로 덤프 :

fancy scatter plot

+1

안녕하세요. 이것은 좋은 시작입니다. 하지만 경계선의 양쪽에 두 개의 데이터 포인트가 있습니다. –

+1

@MichaelRoberts 괜찮습니다. 공상 색인에 원하는만큼 논리 문을 추가 할 수 있습니다. –

+1

이상적. 나는 너의지도에서이 일을하고있다. 고마워요. –