2012-02-14 4 views
3

아래 그림과 같이 X, Y 데이터 및 색이 numpy 배열로 저장되는 matplotlib에 다양한 수의 선을 그려 봅니다. 플롯 함수에 배열을 전달하는 방법이 있나요? 그래서 각 라인에 개별적으로 색상을 할당 할 필요가 없습니다. HSV 또는 기타와 같은 RGB 색상 배열을 다른 색상 포맷으로 변환해야합니까?Matplotlib : 선에 색 지정

import numpy as np 
X = np.arange(1990, 1994) 
Y = [[ 1.50615936e+08 5.88252480e+07 2.60363587e+08] 
    [ 1.53193798e+08 5.91663430e+07 2.63123995e+08] 
    [ 1.55704596e+08 5.94899260e+07 2.65840188e+08] 
    [ 1.58175186e+08 5.97843680e+07 2.68559452e+08]] 
colors = [(0.99609375, 0.3984375, 0.3984375) (0.796875, 0.0, 0.99609375) 
      (0.59765625, 0.99609375, 0.0)] 
#current way 
ax.plot(X, Y) 
[ax.lines[i].set_color(color) for i, color in enumerate(colors)] 
#way I feel it can be done, but doesn't work currently 
ax.plot(X, Y, color=colors) 
plt.show() 

모든 도움을 주시면 감사하겠습니다.

답변

5

Axes 방법 set_color_cycle을 사용하고 싶습니다. 상상할 수있는 것처럼 색상이 기본적으로 할당 될 때 순환되는 색상 목록을 설정합니다. 즉, plot 호출에 색상 키워드가 제공되지 않을 때 설정됩니다. 다음은 귀하의 예제의 확장 버전입니다 :

import matplotlib.pyplot as plt 
import numpy as np 

X = np.arange(1990, 1994) 
Y = [[ 1.50615936e+08, 5.88252480e+07, 2.60363587e+08], 
    [ 1.53193798e+08, 5.91663430e+07, 2.63123995e+08], 
    [ 1.55704596e+08, 5.94899260e+07, 2.65840188e+08], 
    [ 1.58175186e+08, 5.97843680e+07, 2.68559452e+08]] 
colors = [(0.99609375, 0.3984375, 0.3984375), 
      (0.796875, 0.0, 0.99609375), 
      (0.59765625, 0.99609375, 0.0)] 

fig = plt.figure() 
ax1 = fig.add_subplot(211) 
ax1.set_title('old way') 
ax1.plot(X, Y) 
[ax1.lines[i].set_color(color) for i, color in enumerate(colors)] 

ax2 = fig.add_subplot(212) 
ax2.set_title('new way') 
ax2.set_color_cycle(colors) 
ax2.plot(X, Y) 

fig.savefig('manycolors.py') 
plt.show() 

이는 동일 컬러 라인 두 줄거리 결과 : 그 제안보다 새로운 "새로운 방법"

enter image description here

+2

감사합니다() : 그래서이 @Yann 코드의 내 버전입니다. 거기에서 나는 다음을 발견했습니다 : mpl.rcParams [ 'axes.color_cycle'] = self.colors 이것은 여러 서브 플로트를 플로팅하고 같은 색상이 필요하기 때문에 원했던 것입니다. – hotshotiguana

0

여전히있다 @ Yann, Matplotlib 버전 1.5 이후. set_color_cycle 대신에 set_prop_cycle을 사용해야합니다. 여기서 당신은 그의 재발견을 가지고 있습니다. Seaborn을 사용하여 색상 수를 선택할 수있는 미리 팔레트가 많은 팔레트를 사용하는 것이 좋습니다. 팔레트 색상은 좋은 색상 맵을 선택하는 도구 인 Colorbrewer을 기반으로합니다. ax.set_color_cycle의 방향으로 날을 가리키는위한

import matplotlib.pyplot as plt 
import numpy as np 
import seaborn as sns 

X = np.arange(1990, 1994) 
Y = [[ 1.50615936e+08, 5.88252480e+07, 2.60363587e+08], 
    [ 1.53193798e+08, 5.91663430e+07, 2.63123995e+08], 
    [ 1.55704596e+08, 5.94899260e+07, 2.65840188e+08], 
    [ 1.58175186e+08, 5.97843680e+07, 2.68559452e+08]] 

colors = sns.color_palette("hls", len(Y[0])) 

fig = plt.figure() 
ax1 = fig.add_subplot(211) 
ax1.set_title('old way') 
ax1.plot(X, Y) 
[ax1.lines[i].set_color(color) for i, color in enumerate(colors)] 

ax2 = fig.add_subplot(212) 
ax2.set_title('new way') 
ax2.set_prop_cycle('color', colors) 
ax2.plot(X, Y) 

plt.show()