2016-09-10 8 views
1

私は3Dの私の線の間のスペースを埋めるようにしています。3Dプロットの2つの線の間の色付け

私は次のコードを持っている:

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

class plotting3D(object): 
    """ 
    Class to plot 3d 
    """ 

    def __init__(self): 
     pass 

    def cc(self, arg): 
     return colorConverter.to_rgba(arg, alpha=0.6) 

    def poly3d(self, df): 
     """ 
     Method to create depth of joints plot for GP regression. 
     """ 
     fig = plt.figure(figsize=(10,10)) 
     ax = fig.gca(projection='3d') 

     which_joints = df.columns 
     dix = df.index.values 
     zs = [1,4] 
     verts = [] 
     for j in which_joints: 
      verts.append(list(zip(dix,df[j]))) 

     poly = PolyCollection(verts,facecolors=[self.cc('r'), self.cc('g')]) 
     poly.set_alpha(0.6) 
     ax.add_collection3d(poly, zs=zs, zdir='y') 

     ax.set_ylim([0, 5]) 
     ax.set_zlim([0, 20]) 
     ax.set_xlim([0,dix[-1]]) 
     ax.grid(False) 
     ax.set_xlabel('X') 
     ax.set_ylabel('Y') 
     ax.set_zlabel('Z') 

     plt.show() 

いくつかの合成データ:今、私はライン間のスペースを埋めるためにしたい

enter image description here

k= pd.DataFrame(20*np.random.rand(10,2),columns=['foot','other_foot']) 

がこれを生成しますがと答えてz=-30 NOT z=0これは私が変更しようとしているものです。

の値をとり、1000の値をとります。また、angデータフレームの値は、-3010の範囲の値を持ちます。

したがって、私はこのオフセットバージョンを作成しようとしています:

enter image description here

+0

と少なくとも 'Z = 0 '(で終了:あなたはあなたが今やっていることと似3dフィギュアに追加することができますので、PolyCollectionを返しfill_between 'z = 0'の代わりに' z = -30'から塗りつぶすために、おそらく 'z = -30'に座標を追加/追加する必要があります。 – Bart

+0

z軸のデータの範囲は 'z = [ - 30,15]'かそれらに沿ったものです。 – Astrid

+0

p.s .:問題を示す最小限の作業例(http://stackoverflow.com/help/mcve)を提供すると非常に役に立ちます。それは他の人があなたを助けるのがずっと楽になります。 – Bart

答えて

1

コメントで私の提案に対する別の解決策は、fill_betweenを使用することです。あなたは下限を設定する可能性があります。私はあなたのデータが始まることを推測

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

fig = plt.figure(figsize=(10,10)) 
ax = fig.gca(projection='3d') 

# +/- your data: 
z = [0,10,10,-20,10,0] 
x = [0,1000,1500,2500,3000,3500] 

ax.add_collection3d(plt.fill_between(x,z,0), zs=1, zdir='y') # lower boundary z=0 
ax.add_collection3d(plt.fill_between(x,z,-30), zs=5, zdir='y') # lower boundary z=-30 

ax.set_ylim([0, 5]) 
ax.set_zlim([-30, 20]) 
ax.set_xlim([0,3500]) 

enter image description here

+0

あなたはfacecolorを変更し、この新しい体制のアルファを設定する方法を知ることはありませんか? – Astrid

+0

塗りつぶしポリゴンの色とアルファを意味しますか? 'fill_between()'に引数( 'color = ''、alpha = ''')を渡さなければなりません。 – Bart

関連する問題