2016-07-01 3 views
0

두 개의 배열/목록 중 하나는 x 좌표이고 다른 하나는 y 인 산점도를 만들려고합니다. 나는 그 일에 아무런 문제가 없다. 그러나, 나는 2d 배열에있는 데이터를 기반으로 특정 시점의 값을 기준으로 이러한 점을 색으로 지정해야합니다. 또한 데이터의 2 차원 배열은 매우 큰 스프레드를 가지고 있으므로 대수적으로 점을 색칠하고 싶습니다. (이것이 색 막대 레이블을 변경하는 것이거나 더 근본적인 차이가 있는지 여부가 확실하지 않습니다.)matplotlib scatterplot에 로그 색상 막대가있는 세 번째 변수로 채색하기

여기에 지금까지 내 코드입니다 : 내가 시도 할 때

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure(1) 

time = #I'd like to specify time here. 

x = [1, 2, 3, 4, 5] 
y = [5, 4, 3, 2, 1] 

multi_array = [[1, 1, 10, 100, 1000], [10000, 1000, 100, 10, 1], [300, 400, 5000, 12, 47]] 

for counter in np.arange(0, 5): 
    t = multi_array[time, counter] #I tried this, and it did not work. 
    s = plt.scatter(x[counter], y[counter], c = t, marker = 's') 

plt.show() 

내가 그때 그 변수에 동일한 색상을 설정할 수 있었다 세 번째 변수에 의해 다른 색을보고 조언을 따라,하지만 내 데이터 세트 , 나는 단지 하나의 색상으로 모든 포인트를 가지고, 그리고 나서이 모형과 그것을 시도하면 다음과 같은 오류가 발생합니다 :

TypeError: list indices must be integers, not tuple 

누군가 내 포인트를 내가 원하는 방식으로 색칠하는 것을 도와 줄 수 있습니까?

답변

0

일부 땜질 후에는, 및 사용 정보를 user4421975의 대답과에서 배운 코멘트에 링크, 나는 그것을 밖으로 당황했습니다. 간단히 말해서, 나는 plt.scatter의 표준 특징/속성/거물을 사용하여 색상을 엉망으로 만들고 대수를 만들었습니다.

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure(1) 

time = 2 

x = [1, 2, 3, 4, 5] 
y = [5, 4, 3, 2, 1] 

multi_array = np.asarray([[1, 1, 10, 100, 1000], [10000, 1000, 100, 10, 1], [300, 400, 5000, 12, 47]]) 

for counter in np.arange(0, 5): 
    s = plt.scatter(x[counter], y[counter], c = multi_array[time, counter], cmap = 'winter', norm = matplotlib.colors.LogNorm(vmin=multi_array[time].min(), vmax=multi_array[time].max()), marker = 's',) 

cb = plt.colorbar(s) 
cb.set_label('Log of Data') 

plt.show() 
2

나는 질문 (나는 전혀 오프 확신하는) 여기에 대답은 이해한다면 :

import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 
fig = plt.figure(1) 

time = 2 #I'd like to specify time here. 

x = [1, 2, 3, 4, 5] 
y = [5, 4, 3, 2, 1] 

multi_array = np.asarray([[1, 1, 10, 100, 1000], [10000, 1000, 100, 10, 1], [300, 400, 5000, 12, 47]]) 
log_array=np.log10(multi_array) 
s = plt.scatter(x, y, c=log_array[time], marker = 's',s=100) 
cb = plt.colorbar(s) 
cb.set_label('log of ...') 
plt.show() 

enter image description here

+0

이것은 도움이되었지만 나는 의미하지 않았습니다. 나는 데이터의 로그를 채색하고 싶지 않다. 색상을 대수적으로 변경하고 싶다. 그 말이 맞는다면? – evtoh

+0

이런 종류의. [http://matplotlib.org/examples/pylab_examples/pcolor_log.html] (http : //matplotlib.org/examples/pylab_examples/pcolor_log.html) – evtoh