2012-01-20 4 views
6

줄을 구성하는 y 값의 배열이 있습니다. 또한 0부터 1까지의 y 배열 값과 동일한 수의 배열을 가지고 있습니다.이 배열을 'z'라고 부릅니다. 각 점의 색이 z 값과 일치하도록 y 값의 배열을 플롯하려고합니다.matplotlib의 gnuplot linecolor 변수?

plot ’data’ using 1:2:3 with points lc variable 

여기에서 조언을 사용 :

가의 gnuplot에서, 당신은 'LC 변수'를 사용하여이 작업을 수행 할 수 있습니다 Matplotlib scatterplot; colour as a function of a third variable, 내가 일을 한 산포도를 사용할 수 있었다 :

import matplotlib as mpl 
import matplotlib.pyplot as plt 

plt.scatter(x, y, c=z, s=1, edgecolors='none', cmap=mpl.cm.jet) 
plt.colorbar() 
plt.show() 

이 유사하기 matplotlib에서 플롯 방법이 할 수있는 방법이 있나요?

plt.plot(x, y, c=z) 

위의 코드를 시도하면 모든 줄이 검은 색으로 보입니다.

+0

는'액정 variable'는 * 라인 타입 인덱스를 선택 *에 근거 : 여기

는 높이에 따라 그 착색하는 기본 맵의 궤적을 나타내는 내 예이며 마지막 열의 값. 색상으로 사용하려면 예 : 'lc palette z'. – Christoph

답변

2

당신은 분산을 사용할 수 있습니다

여기
plt.scatter(range(len(y)), y, c=z, cmap=cm.hot) 

당신은 ipython -pylab 세션이 : 당신이 음모를 사용하려면

In [27]: z = [0.3,0.4,0.5,0.6,0.7,0.2,0.3,0.4,0.5,0.8,0.9] 

In [28]: y = [3, 7, 5, 6, 4, 8, 3, 4, 5, 2, 9] 

In [29]: plt.scatter(range(len(y)), y, s=60, c=z, cmap=cm.hot) 
Out[29]: <matplotlib.collections.PathCollection at 0x9ec8400> 

enter image description here

을 사용하면 해당 그림과 같이 얻을 수 있습니다 위의 (pycrust 세션) :

>>> from matplotlib import pyplot as plt 
>>> from matplotlib import cm 
>>> y = [3,7,5,6,4,8,3,4,5,2,9] 
>>> z = [0.3,0.4,0.5,0.6,0.7,0.2,0.3,0.4,0.5,0.8,0.9] 
>>> for x, (v, c) in enumerate(zip(y,z)): 
...  plt.plot(x,v,marker='o', color=cm.hot(c)) 
...  
[<matplotlib.lines.Line2D object at 0x0000000008C42518>] 
[<matplotlib.lines.Line2D object at 0x0000000008C426D8>] 
[<matplotlib.lines.Line2D object at 0x0000000008C42B38>] 
[<matplotlib.lines.Line2D object at 0x0000000008C452B0>] 
[<matplotlib.lines.Line2D object at 0x0000000008C45438>] 
[<matplotlib.lines.Line2D object at 0x0000000008C45898>] 
[<matplotlib.lines.Line2D object at 0x0000000008C45CF8>] 
[<matplotlib.lines.Line2D object at 0x0000000008C48198>] 
[<matplotlib.lines.Line2D object at 0x0000000008C485F8>] 
[<matplotlib.lines.Line2D object at 0x0000000008C48A58>] 
[<matplotlib.lines.Line2D object at 0x0000000008C4B1D0>] 
>>> plt.show() 
>>> 
+0

고마워요. 플롯 대신 분산을 사용하기로 결정했습니다. –

17

나는 똑같은 문제가있다. 제 3의 변수 (z)에 의존하기를 바라는 불균일 한 색의 줄을 그려보고 싶었다.

하지만 마커가 아니라 (마침내 @ joaquin의 대답과 같이) 줄을 사용하고 싶었습니다. matplotlib.collections.LineCollection (링크 here) 클래스를 사용하여 matplotlib gallery example에 해결책을 찾았습니다.

import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap 
from matplotlib.collections import LineCollection 
import numpy as np 

m = Basemap(llcrnrlon=-42,llcrnrlat=0,urcrnrlon=5,urcrnrlat=50, resolution='h') 
fig = plt.figure() 
m.drawcoastlines() 
m.drawcountries() 

for i in trajectorias: 
    # for each i, the x (longitude), y (latitude) and z (height) 
    # are read from a file and stored as numpy arrays 

    points = np.array([x, y]).T.reshape(-1, 1, 2) 
    segments = np.concatenate([points[:-1], points[1:]], axis=1) 

    lc = LineCollection(segments, cmap=plt.get_cmap('Spectral'), 
         norm=plt.Normalize(250, 1500)) 
    lc.set_array(z) 
    lc.set_linewidth(2) 

    plt.gca().add_collection(lc) 

axcb = fig.colorbar(lc) 
axcb.set_label('cota (m)') 

plt.show() 
의 gnuplot에서

height dependent trajectories

+0

아주 좋은 예입니다! – Christoph

+0

선분 사이를 부드럽게 전환하려면 'segments = np.concatenate ([점 [: - 2], 점 [1 : -1], 점 [2 :]], 축 = 1)'대신 할 수 있습니다. – shockburner