2016-11-20 9 views
0

私は球をプロットするコードを書いています。私は、別の関数を使ってランダムな点を生成しています。これらを同じグラフに球として追加したいと思います。現時点では、各球に対して別々のグラフが作成されます。コードを以下に示します。ディスクは[x、y、z]という形式のリストです。また、x軸、y軸、z軸の長さを等しくすることは可能ですか?どうもありがとう。簡単に言うと同じグラフに複数の球をプロットする

def plot_disks2(disk, radius, c, ax=None): 
    fig = plt.figure(figsize=(12,12), dpi=300) 
    ax = fig.add_subplot(111, projection='3d') 

    u = np.linspace(0, 2 * np.pi, 100) 
    v = np.linspace(0, np.pi, 100) 

    x = radius * np.outer(np.cos(u), np.sin(v)) 
    y = radius * np.outer(np.sin(u), np.sin(v)) 
    z = radius * np.outer(np.ones(np.size(u)), np.cos(v)) 


    ax.plot_surface(x+disk[0], y+disk[1], z+disk[2], rstride=4, cstride=4, color=c, linewidth=0, alpha=0.5) 

答えて

0

、次のように、プロットのためのデータや他のものを生成する機能を使用することをお勧めです:

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

def disks2(disk, radius): 
    u = np.linspace(0, 2 * np.pi, 100) 
    v = np.linspace(0, np.pi, 100) 
    x = radius * np.outer(np.cos(u), np.sin(v)) 
    y = radius * np.outer(np.sin(u), np.sin(v)) 
    z = radius * np.outer(np.ones(np.size(u)), np.cos(v)) 
    return x+disk[0],y+disk[1],z+disk[2] 

def plotting_spheres(data, colors): 
    fig = plt.figure(figsize=(12,12), dpi=300) 
    ax = fig.add_subplot(111, projection='3d') 
    for k,sph in enumerate(data): 
     x, y, z = sph[0], sph[1], sph[2] 
     ax.plot_surface(x, y, z, rstride=4, cstride=4, 
         color=colors[k], linewidth=0, alpha=0.5) 
    ax.set_aspect("equal") 
    plt.show() 

N = 5 # spheres 
points = np.random.randint(1,10,(N,3)) 
rs = np.random.random((N,1)) 
colors = ("r","g","b","y","m") 

data = [disks2(points[k,:], rs[k]) for k in range(N)] 
plotting_spheres(data, colors) 

軸の側面のためにあなたがset_aspectメソッドを使用することができます。

+0

ありがとうございました – Hello

関連する問題