まず、marker のエッジ色ですが、ax.scatter()
の引数で edgecolor=None
または edgecolor='fase'
で facecolor と同色になるかと思います。
次に、値0の点のみ描写しない方法ですが、データ自体を編集する方法もありますが、colormap
を修正する方法が比較的簡単なのでこちらを説明します。
現在colormap
に seismic を使用しているようですので、まずはこれを
Python
1import matplotlib.pyplot as plt
2
3cm = plt.cm.seismic
4cm_list = cm(np.arange(cm.N))
5print(cm_list)
とすると、cm.N
諧調(256階調になっているはず)で seismic のデータ配列を得ることができます。
この配列の4列目がalpha値(透明度)なので
Python
1# 全体の透明度を0.3に設定
2cm_list[:, -1] = 0.3
3# 中心部(127,128行目) の透明度を 0 に設定
4cm_list[[127,128], -1] = 0.
などと書き換えて、最後に
from matplotlib.colors import ListedColormap
mycmap = ListedColormap(cm_list)
とするとカスタム版の seismic が作成できます。
あとはこれを ax.scatter()
にて
Python
1sc = ax.scatter(X, Y, Z, vmin=-30,vmax=30, c=data, cmap=mycmap)
とcmap
に設定すると、0 付近の値が表示されていない(透明色で表示されている)はずです。
ax.scatter()
の引数で alpha=0.3
を設定してしまうと、その値
が優先される為、colormap で設定した alpha値が 無視されるので注意してください。
今回は説明の簡略化の為に、中心のみ alpha値を 0 に書き換えましたが、0に近づく毎に aplpa値を段階的に下げていくなどの処理があったほうがよいかもしれません。
最後に、一応動くコードを置いておきます。
Python
1from mpl_toolkits.mplot3d import Axes3D
2import matplotlib.pyplot as plt
3from matplotlib.colors import ListedColormap
4import numpy as np
5
6# data生成
7data=np.zeros((25,25,25))
8data[24][0][0]=30
9data[24][0][0]=30
10c = np.zeros((25,25,25))
11X,Y,Z = np.meshgrid(range(data.shape[0]), range(data.shape[1]), range(data.shape[2]))
12
13# colormap生成
14cm = plt.cm.seismic
15cm_list = cm(np.arange(cm.N))
16cm_list[:, -1] = 0.3
17cm_list[[127,128], -1] = 0
18mycmap = ListedColormap(cm_list)
19
20# 描写処理
21fig = plt.figure()
22ax = fig.add_subplot(111, projection='3d', aspect='equal')
23sc = ax.scatter(X, Y, Z, vmin=-30,vmax=30,c=data, cmap=mycmap, edgecolor=None)
24fig.colorbar(sc)
25plt.show()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/11 08:50