web-dev-qa-db-ja.com

同じimshowmatplotlib内の2つの異なるカラーカラーマップ

以下の例を考えてみましょう

import matplotlib.pyplot as plt
import numpy as np

v1 = -1 + 2*np.random.Rand(50,150)
fig = plt.figure()
ax = fig.add_subplot(111)
p = ax.imshow(v1,interpolation='nearest')
cb = plt.colorbar(p,shrink=0.5)
plt.xlabel('Day')
plt.ylabel('Depth')
cb.set_label('RWU')
plt.show()

ゼロより上の値とは異なるカラーマップでゼロより下の値を表示したい

15
Marcos Alex

まず第一に、ゼロで「ニュートラル」で、2つの異なる色に発散する発散カラーマップを使用したいだけでよいのでしょうか。これは例です:

import matplotlib.pyplot as plt
import numpy as np

v1 = -1+2*np.random.Rand(50,150)
fig,ax = plt.subplots()
p = ax.imshow(v1,interpolation='nearest',cmap=plt.cm.RdBu)
cb = plt.colorbar(p,shrink=0.5)
ax.set_xlabel('Day')
ax.set_ylabel('Depth')
cb.set_label('RWU')
plt.show()

enter image description here

本当に2つの異なるカラーマップを使用したい場合、これはマスクされた配列を使用したソリューションです。

import matplotlib.pyplot as plt
import numpy as np
from numpy.ma import masked_array

v1 = -1+2*np.random.Rand(50,150)
v1a = masked_array(v1,v1<0)
v1b = masked_array(v1,v1>=0)
fig,ax = plt.subplots()
pa = ax.imshow(v1a,interpolation='nearest',cmap=cm.Reds)
cba = plt.colorbar(pa,shrink=0.25)
pb = ax.imshow(v1b,interpolation='nearest',cmap=cm.winter)
cbb = plt.colorbar(pb,shrink=0.25)
plt.xlabel('Day')
plt.ylabel('Depth')
cba.set_label('positive')
cbb.set_label('negative')
plt.show()

enter image description here

27
gg349