2014-03-01 1 views
2

데이터 매핑을 사용하여 색상 매핑 (cmap)을 사용하여 매핑 된 데이터를 rgba 값으로 변환하는 구체적인 구현 질문이 있습니다. 본질적으로, 나는 에러 바 (errorbar) 그 자체뿐만 아니라 포인트가 다른 값의 크기로 채색되어있는 곳에 대한 errorbar() 플롯을 만들고 싶습니다. (구체적인 것은 카이 제곱에 기여한다고합시다. 어떤 모델의 적합성). 첫 번째 두 열이 X 및 Y 데이터이고 세 번째 열이 오류 막대의 값이고 마지막 열이 카이 제곱 함수에 대한 기여 인 D (N, 4) 배열이 있다고 가정 해 보겠습니다.cmplotlib의 cmap에 cmap

어떻게 chi-square 기여 값의 범위를 cmap에 매핑하고 두 번째로 2) errorbar() 함수를 통해 플롯하기 위해 이들로부터 rgba 값을 얻을 수 있습니까? 나는 무엇을 음모하고자 했는가?

실제로 도움이 될 수 있지만 (to_rgba() 메서드가있는) ScalarMappable() 사용 방법에 대한 예제 나 추가 정보를 찾을 수 없습니다.

감사합니다.

답변

3

값에 matplotlib.cm의 객체를 호출하여 스칼라 값을 색상 맵에 매핑 할 수 있습니다. 값은 (I 무작위로 생성 할 수 있습니다하는) 일부 카이 제곱 분포 데이터 RBGA 값을 얻기 위해, 그래서 0과 1 사이에 놓여 야, 내가 할 것 :

chisq = np.random.chisquare(4, 8) 
chisq -= chisq.min() 
chisq /= chisq.max() 
errorbar_colors = cm.winter(chisq) 

을 대신 컬러 스케일의 시작을 필요로하고 최소 및 최대 실제 값에서 끝나면 최소값에서 빼고 원하는 최대 값으로 나눌 수 있습니다.

array([[ 0.  , 0.7372549 , 0.63137255, 1.  ], 
     [ 0.  , 0.7372549 , 0.63137255, 1.  ], 
     [ 0.  , 0.4745098 , 0.7627451 , 1.  ], 
     [ 0.  , 1.  , 0.5  , 1.  ], 
     [ 0.  , 0.36078431, 0.81960784, 1.  ], 
     [ 0.  , 0.47843137, 0.76078431, 1.  ], 
     [ 0.  , 0.  , 1.  , 1.  ], 
     [ 0.  , 0.48627451, 0.75686275, 1.  ]]) 

이 플롯하려면 그냥 색상과 데이터 포인트를 반복하고 errorbars 그릴 수 있습니다 :

heights = np.random.randn(8) 
sem = .4 

for i, (height, color) in enumerate(zip(heights, errorbar_colors)): 
    plt.plot([i, i], [height - sem, height + sem], c=color, lw=3) 
plt.plot(heights, marker="o", ms=12, color=".3") 

지금 errorbar_colorswinter 컬러 맵에서 RGBA 값의 (8, 4) 배열이됩니다

enter image description here

그러나 내장 matplotlib 색상 표는 모두 th입니다. 이 작업에 적합합니다. 일부 향상을 위해, 당신은 컬러 라인에 사용할 수있는 순차적 인 컬러 팔레트 생성 시본 사용할 수 있습니다 심지어 여기

import numpy as np 
import seaborn 
import matplotlib.pyplot as plt 
from matplotlib.colors import ListedColormap 

chisq = np.random.chisquare(4, 8) 
chisq -= chisq.min() 
chisq /= chisq.max() 

cmap = ListedColormap(seaborn.color_palette("GnBu_d")) 
errorbar_colors = cmap(chisq) 

heights = np.random.randn(8) 
sem = .4 

for i, (height, color) in enumerate(zip(heights, errorbar_colors)): 
    plt.plot([i, i], [height - sem, height + sem], c=color, lw=3) 
plt.plot(heights, marker="o", ms=12, color=".3") 

enter image description here

하지만를, 나는 이것이 가장 좋은 방법이 될 것입니다 것을 의심이 너의 요점을 알기 위해서. 나는 당신의 데이터가 어떻게 생겼는지 정확히 모르겠다.하지만 여기서는 플로팅 할 종속 변수를 가진 두 개의 플롯을 만들고, 종속 변수로 카이 제곱 통계를 사용하여 두 번째 플롯을 만들 것을 권할 것이다. 또는 오류 막대의 크기와 카이 제곱 값 사이의 관계에 관심이있는 경우 산점도로 직접 플롯합니다.

+0

우수한 응답! 게시물 주셔서 감사합니다. 나는 이것을하기위한 또 다른 방법을 생각해 내고 말았다. – astromax

관련 문제