2017-01-31 2 views
5

色を使用してマップ上にxyという2つの変数を表現しようとしています。Matplotlib 2つのパラメータを持つカラーマップ

これまでのところ、私が達成できる最良のものは、ある変数に色を使用し、別の変数に色を使用することです。

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

それは2つの変数を取るmatplotlibの中に2Dカラーマップを作成することは可能ですか?

+0

関連する(間違いなくdupe)http://stackoverflow.com/q/10958835/2988730 –

+0

特に2番目の回答http://stackoverflow.com/a/10992313/2988730 –

+0

また、独自のカラーマップを実装することもできますxとyは単一のパラメータとしてエンコードされます。複素数であり、その符号化された値を返す関数を持つ。 –

答えて

3

一般に、マトプロテリブのカラーマップは1Dであり、スカラーをカラーにマッピングします。 2Dカラーマップを取得するには、2つのスカラを1つの色にマッピングする必要があります。これは原則的には可能ですが、通常のカラーマップほど便利ではありません。

ここでは、2つのパラメータをそれぞれ赤と青の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)が役に立ちます。

関連する問題