2017-01-31 4 views
5

색을 사용하여지도에 두 개의 변수 xy을 표시하려고합니다.Matplotlib 두 매개 변수가있는 색상 표

지금까지 내가 할 수있는 최선의 방법은 한 변수에 색상을 사용하고 다른 변수에는 투명도를 사용하는 것입니다.

plt.Polygon(shape.points, fill=False, color=cmap(y), alpha=x)

는 두 변수가 필요하기 matplotlib에서 2 차원 컬러 맵을 작성하는 것이 가능?

+0

관련 항목 (확실히 중복 안 함) http://stackoverflow.com/q/10958835/2988730 –

+0

특히 두 번째 대답 http://stackoverflow.com/a/10992313/2988730 –

+0

또한 자신의 색상 맵을 구현해 볼 수도 있습니다 x와 y를 단일 매개 변수로 인코딩합니다 (예 : 복소수 및 해당 인코딩 된 값을 반환하는 함수가 있습니다. –

답변

3

일반적으로 matplotlib의 색상 맵은 1D이며, 즉 스칼라를 색상으로 매핑합니다. 2D 칼라 맵을 얻으려면 어떻게 든 두 개의 스칼라를 색상으로 매핑해야합니다. 이것은 원칙적으로 가능하지만 일반적인 색상 맵만큼 편리하지는 않습니다.

다음은 두 매개 변수를 각각 빨강 및 파랑 RGB 색상 채널에 매핑하여 2D 색상 맵을 만드는 예제입니다.

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 
ax.set_aspect("equal") 

x = [1,1,2,2,3,3] # xdata 
y = [1,2,3,1,2,3] # ydata 
p1 = [0.2,0.4,.6,.8,.6,.1] # parameter 1 
p2 = [0.4,0.5,.7,.1,.3,.7] # parameter 2 

# create a very simple colormap, 
# mapping parameter 1 to the red channel and 
#   parameter 2 to the blue channel 
cmap = lambda p1,p2 : (p1, 0, p2) 

# put shapes at positions (x[i], y[i]) and colorize them with our 
# cmap according to their respective parameters 
for i in range(len(x)): 
    circle = plt.Circle((x[i], y[i]), 0.5, color=cmap(p1[i],p2[i])) 
    ax.add_artist(circle) 
    tx="p1: {}\np2: {}".format(p1[i],p2[i]) # create a label 
    ax.text(x[i], y[i], tx, ha="center", color="w", va="center") 

ax.set_xlim(0,4) 
ax.set_ylim(0,4) 
ax.set_xlabel("x") 
ax.set_ylabel("y") 

# create the legend: 

plt.subplots_adjust(left=0.1, right=0.65, top=0.85) 
cax = fig.add_axes([0.7,0.55,0.3,0.3]) 
cp1 = np.linspace(0,1) 
cp2 = np.linspace(0,1) 
Cp1, Cp2 = np.meshgrid(cp1,cp2) 
C0 = np.zeros_like(Cp1) 
# make RGB image, p1 to red channel, p2 to blue channel 
Legend = np.dstack((Cp1, C0, Cp2)) 
# parameters range between 0 and 1 
cax.imshow(Legend, origin="lower", extent=[0,1,0,1]) 
cax.set_xlabel("p1") 
cax.set_ylabel("p2") 
cax.set_title("2D cmap legend", fontsize=10) 

plt.show() 

enter image description here

이 제도

물론 다른 (더 복잡) colormappings로 확장 할 수 있으며, imshow 또는 pcolormesh 플롯 할 수 있습니다. 또한 HSV colorscheme을 사용하면 RGB와 비교할 때 이점이 있으므로 matplotlib.colors.hsv_to_rgb(hsv)이 도움이 될 수 있습니다.

관련 문제