matplotlib
カラーマップ
サーチ…
基本的な使用法
組み込みのカラーマップを使用するのは、必要なカラーマップの名前( カラーマップ参照にあるように )を、通常はcmap
キーワード引数の形式で、プロット関数( pcolormesh
またはcontourf
など)に渡すのと同じくらい簡単です。
import matplotlib.pyplot as plt
import numpy as np
plt.figure()
plt.pcolormesh(np.random.rand(20,20),cmap='hot')
plt.show()
カラーマップは、3次元データを2次元プロットで視覚化する場合に特に便利ですが、適切なカラーマップは適切な3次元プロットをより明確にすることができます。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import LinearLocator
# generate example data
import numpy as np
x,y = np.meshgrid(np.linspace(-1,1,15),np.linspace(-1,1,15))
z = np.cos(x*np.pi)*np.sin(y*np.pi)
# actual plotting example
fig = plt.figure()
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(x,y,z,rstride=1,cstride=1,cmap='viridis')
ax2 = fig.add_subplot(122)
cf = ax2.contourf(x,y,z,51,vmin=-1,vmax=1,cmap='viridis')
cbar = fig.colorbar(cf)
cbar.locator = LinearLocator(numticks=11)
cbar.update_ticks()
for ax in {ax1, ax2}:
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_aspect('equal')
ax1.set_zlim([-1,1])
ax1.set_zlabel(r'$\cos(\pi x) \sin(\p i y)$')
plt.show()
カスタムカラーマップの使用
カラーマップ参照で定義された組み込みのカラーマップ (およびそれらの逆マップ、名前に'_r'
追加されている)とは別に、カスタムカラーマップを定義することもできます。キーはmatplotlib.cm
モジュールです。
次の例では、単一の色を含むcm.register_cmap
を使用する非常に単純なカラーマップを定義しています。データ範囲内で完全に不透明で完全に透明な色の不透明度(アルファ値)が補間されています。カラーマップの観点から見た重要な行は、 cm
のインポート、 register_cmap
への呼び出し、およびカラーマップをplot_surface
です。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.cm as cm
# generate data for sphere
from numpy import pi,meshgrid,linspace,sin,cos
th,ph = meshgrid(linspace(0,pi,25),linspace(0,2*pi,51))
x,y,z = sin(th)*cos(ph),sin(th)*sin(ph),cos(th)
# define custom colormap with fixed colour and alpha gradient
# use simple linear interpolation in the entire scale
cm.register_cmap(name='alpha_gradient',
data={'red': [(0.,0,0),
(1.,0,0)],
'green': [(0.,0.6,0.6),
(1.,0.6,0.6)],
'blue': [(0.,0.4,0.4),
(1.,0.4,0.4)],
'alpha': [(0.,1,1),
(1.,0,0)]})
# plot sphere with custom colormap; constrain mapping to between |z|=0.7 for enhanced effect
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x,y,z,cmap='alpha_gradient',vmin=-0.7,vmax=0.7,rstride=1,cstride=1,linewidth=0.5,edgecolor='b')
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect('equal')
plt.show()
より複雑なシナリオでは、対応するプロットで使用される色を決定するためにmatplotlibが直線的に補間するR / G / B(/ A)値のリストを定義することができます。
知覚的に均一なカラーマップ
jet
と呼ばれるMATLABの元のデフォルトカラーマップ(R2014bで置き換えられました)は、高いコントラストと親しみやすさのために遍在しています(互換性の理由からmatplotlibのデフォルトでした)。その人気にもかかわらず、 従来のカラーマップには、データを正確に表現することに欠点があることがよくあります。これらのカラーマップの変化は、データの変化に対応していません。カラーマップをグレースケールに変換すると(例えば、白黒プリンタを使用して図形を印刷するなど)、情報が失われる可能性があります。
知覚的に一様なカラーマップは、データ可視化を可能な限り正確かつアクセス可能にするために導入されました。 Matplotlibはバージョン1.5に4つの新しい知覚的にユニークなカラーマップを導入し 、そのうちの1つ( viridis
という名前)をバージョン2.0からデフォルトにしました。これらの4つのカラーマップ( viridis
、 inferno
、 plasma
、 magma
)は、知覚の観点からはすべて最適です。そうしないと非常に良い理由がない限り、デフォルトでデータ視覚化に使用してください。これらのカラーマップは、できるだけ偏りのないように導入しています(開始する場所がない場合はフィーチャを作成しないため)、色の知覚が低下したオーディエンスに適しています。
データを視覚的に歪める例として、ピラミッド型オブジェクトの次の2つのトップビュープロットを考えてみましょう。
どちらが正しいピラミッドですか?答えはもちろん両方ともそうですが、これはjet
カラーマップを使ったプロットからははっきりしていません。
この特徴は、知覚的一様性の中心にある。
カスタムの個別カラーマップ
定義済みの範囲があり、その範囲に特定の色を使用する場合は、カスタムカラーマップを宣言できます。例えば:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors
x = np.linspace(-2,2,500)
y = np.linspace(-2,2,500)
XX, YY = np.meshgrid(x, y)
Z = np.sin(XX) * np.cos(YY)
cmap = colors.ListedColormap(['red', '#000000','#444444', '#666666', '#ffffff', 'blue', 'orange'])
boundaries = [-1, -0.9, -0.6, -0.3, 0, 0.3, 0.6, 1]
norm = colors.BoundaryNorm(boundaries, cmap.N, clip=True)
plt.pcolormesh(x,y,Z, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()
プロデュース
色iは境界iとi + 1の間の値に使用されます。色は名前( 'red'
、 'green'
)、HTMLコード( '#ffaa44'
、 '#441188'
)またはRGBタプル( (0.2, 0.9, 0.45)
'#441188'
(0.2, 0.9, 0.45)
)で指定できます。