2017-04-03 7 views
1

私の問題は、この構造体の0,0,0点を他のすべての点よりも異なる色で描きたかったということです。しかし、選択された色でプロットが現れ、このボールの内側はまだ他のものと同じ色で。 これがどのように機能しているのか分かりません。Matplotlibは3dカラーを散らす

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 



fig = plt.figure() 
ax = fig.gca(projection='3d') 
ax.set_aspect("equal") 

for x in range(-count,count+1): 
    for y in range(-count,count+1): 
     for z in range(-count,count+1): 
      if x == 0 and y == 0 and z == 0: 
       ax.scatter(x,y,z, color="g",s=100) #here is the problem 
      elif ((x+y+z+3*count)%2) == 0: 
       ax.scatter(*zip([x,y,z]), color="r") 
      else: 
       ax.scatter(*zip([x,y,z]), color="b") 

    plt.show() 

plot of cubic structure

答えて

4

あなたは、エッジや面の色を設定する引数edgecolorfacecolorを使用することができます。

ax.scatter(x,y,z, s=100, edgecolor="r", facecolor="gold") 

別の方法としては、直接色を設定するか

ax.scatter(x,y,z, s=100, c="limegreen") 

を引数cを使用することができ、またはカラーマップを介して、色によって表されるべき値の範囲を設定します。この最後のアプローチはまた、そうのような、単一の散布図内のすべてのポイントを置くことができるでしょう:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
ax.set_aspect("equal") 

count = 2 
x = range(-count,count+1) 
X,Y,Z = np.meshgrid(x,x,x) 

c = np.zeros_like(X, dtype=np.float) 
c[((X+Y+Z+3*count)%2) == 0] = 0.5 
c[count,count,count] = 1 

s = np.ones_like(X)*25 
s[count,count,count] = 100 
ax.scatter(X,Y,Z, c=c,s=s, cmap="brg") 

plt.show() 

enter image description here

+0

私は、このソリューションを試してみましたが、それはうまくいきませんでした。 – wiedzminYo

+0

私はさらに2つの選択肢を追加しました。彼らがうまくいかない場合は、本当に古いバージョンのmatplotlibを使用している可能性があります。 – ImportanceOfBeingErnest

+0

あなたは正しいです、私はちょうど私のmatplotlibバージョンをアップグレードしなければなりませんでした。あなたの助けに感謝します。 – wiedzminYo