2017-01-14 18 views
2

カスタムカラーマップを使用してパッチのコレクションをプロットする必要があります。私はこれを正常に動作させましたが、カスタムカラーマップでアルファを適切に使用することはできません。画像や添付コードに見られるように、アルファはパッチに適用されますが、カラーバーはまだアルファ= 1で表示され、マップが「間違っています」。確認するために、私はジェットをテストし、カラーバーは適切なアルファを反映しています。最初のケースに見られるように...カスタムカラーマップ用にアルファベットを実装する

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

x = np.random.rand(50,1)*500; y = np.random.rand(50,1)*500; 
radius = np.random.rand(50,1)*50 
patches = [] 
for i in range(len(radius)): 
    circle = matplotlib.patches.Circle((x[i], y[i]), radius[i]) 
    patches.append(circle) 
fig, ax = plt.subplots() 
colors = 100*np.random.rand(len(patches)) 
p = matplotlib.collections.PatchCollection(patches) 
p.set(array = colors, cmap = 'Spectral', alpha=0.5) 
ax.add_collection(p) 
plt.colorbar(p, alpha=0.5) 
plt.xlim(0,500);plt.ylim(0,500); 
plt.gca().set_aspect(1) 
plt.show() 

############ 
r = np.hstack((np.zeros(425),np.linspace(0,255,430), np.linspace(254,0,425))) 
g = np.hstack((np.linspace(0,255,430), np.linspace(254,0,425), np.zeros(425))) 
b = np.hstack((np.linspace(255,0,430), np.zeros(425),np.linspace(0,254,425))) 
c = np.array([r,g,b]).T 
mycm = matplotlib.colors.ListedColormap(c/255.0) 
########### 
x = np.random.rand(50,1)*500; y = np.random.rand(50,1)*500; 
radius = np.random.rand(50,1)*50 
patches = [] 
for i in range(len(radius)): 
    circle = matplotlib.patches.Circle((x[i], y[i]), radius[i]) 
    patches.append(circle) 
fig, ax = plt.subplots() 
colors = 100*np.random.rand(len(patches)) 
p = matplotlib.collections.PatchCollection(patches) 
p.set(array = colors, cmap = mycm, alpha=0.5) 
ax.add_collection(p) 
plt.colorbar(p, alpha=0.5) 
plt.xlim(0,500);plt.ylim(0,500); 
plt.gca().set_aspect(1) 
plt.show() 

plot made using jet plot made using my colormap

答えて

0

を私は何かが私は私のカラーバーを定義された方法に欠けていると仮定していますが、ドキュメントが何を考え出すのに役立つされていませんmatplotlibはカラーバーの色の間に小さな線を追加します。これらのラインは、カラーバーの作成に使用されるpcolormeshから来ています。私は彼らがなぜそこにいるのか分かりませんし、それらを取り除く方法もわかりませんが、アルファ値が正しく表示されないという問題の原因です。 実際の色が少し暗く表示されているように、カラーバーに複数の行を追加すると、完全なカラーバーがこれらの線で構成され、より暗くまたは透明に見えます。 これはまさに第2のケースで行われていることで、430 + 425 + 425 = 1280の値を持つListedColormapが使用されています。 HTTPS:

溶液は、したがって、私は90

import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
############ 
n= 30 
r = np.hstack((np.zeros(n),np.linspace(0,255,n), np.linspace(254,0,n))) 
g = np.hstack((np.linspace(0,255,n), np.linspace(254,0,n), np.zeros(n))) 
b = np.hstack((np.linspace(255,0,n), np.zeros(n),np.linspace(0,254,n))) 
c = np.array([r,g,b]).T 
mycm = matplotlib.colors.ListedColormap(c/255.0) 
########### 
x = np.random.rand(50,1)*500; y = np.random.rand(50,1)*500; 
radius = np.random.rand(50,1)*50 
patches = [] 
for i in range(len(radius)): 
    circle = matplotlib.patches.Circle((x[i], y[i]), radius[i]) 
    patches.append(circle) 
fig, ax = plt.subplots() 
colors = 100*np.random.rand(len(patches)) 
p = matplotlib.collections.PatchCollection(patches) 
p.set(array = colors, cmap = mycm, alpha=0.5) 
ax.add_collection(p) 
plt.colorbar(p, alpha=0.5) 
plt.xlim(0,500);plt.ylim(0,500); 
plt.gca().set_aspect(1) 
plt.savefig(__file__+".png") 
plt.show() 

enter image description here

+0

関連性を使用以下の例のコードで255以下の値にListedColormapの色数を減らすになるであろう。 //github.com/matplotlib/matplotlib/issues/5151 – tom

関連する問題