Python 在三维散点图上绘制多个数据

Python 在三维散点图上绘制多个数据,python,matplotlib,scatter3d,Python,Matplotlib,Scatter3d,在单个3D散点图上绘制多组数据时遇到问题。我要做的是,我有一个由三个方程组成的系统,我用linalg计算方程的零点。然后我在3D绘图上绘制每一组零。对于我的一个参数,我正在改变它的值,并观察零是如何改变的。我想在一个3D散点图上绘制所有的数据集,这样比较它们之间的差异就很容易了,但我一直在为每个数据集绘制一个图。你们谁能想出我需要修理什么 import numpy as np from numpy import linalg import matplotlib.pyplot as plt fro

在单个3D散点图上绘制多组数据时遇到问题。我要做的是,我有一个由三个方程组成的系统,我用linalg计算方程的零点。然后我在3D绘图上绘制每一组零。对于我的一个参数,我正在改变它的值,并观察零是如何改变的。我想在一个3D散点图上绘制所有的数据集,这样比较它们之间的差异就很容易了,但我一直在为每个数据集绘制一个图。你们谁能想出我需要修理什么

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

plt.close('all')
#Will be solving the following system of equations:
#sx-(b/r)z=0
#-x+ry+(s-b)z=0
#(1/r)x+y-z=0

r=50.0
b=17.0/4.0
s=[10.0,20.0,7.0,r/b]

color=['r','b','g','y']
markers=['s','o','^','d']

def system(s,b,r,color,m):
#first creates the matrix as an array so the parameters can be changed from outside
#and then coverts array into a matrix
    u_arr=np.array([[s,0,-b/r],[-1,r,s-b],[1/r,1,-1]])
    u_mat=np.matrix(u_arr)

    U_mat=linalg.inv(u_mat)

    #converts matrix into an array and then into a list to manipulate
    x_zeros=np.array(U_mat[0]).reshape(-1).tolist()
    y_zeros=np.array(U_mat[1]).reshape(-1).tolist()
    z_zeros=np.array(U_mat[2]).reshape(-1).tolist()

    zeros=[x_zeros,y_zeros,z_zeros]
    coordinates=['x','y','z']

    print('+'*70)
    print('For s=%1.1f:' % s)
    print('\n')

    for i in range(3):
        print('For the %s direction, the roots are: ' % coordinates[i])
        for j in range(3):
            print(zeros[i][j])
        print('-'*50)

    fig3d=plt.figure()
    ax=Axes3D(fig3d)
    ax.scatter(x_zeros,y_zeros,z_zeros,c=color,marker=m)
    plt.title('Zeros for a Given System of Equations for s=%1.1f' % (s))
    ax.set_xlabel('Zeros in x Direction')
    ax.set_ylabel('Zeros in y Direction')
    ax.set_zlabel('Zeros in z Direction')
    plt.show()

for k in range(len(s)):
    system(s[k],b,r,color[k],markers[k])

提前感谢您的帮助。

每次调用
system()
时,您都将创建一个新的Axis实例。而是将
ax
作为参数传递给
system

def system(s,b,r,color,m, ax):

        # ...
        ax.scatter(x_zeros,y_zeros,z_zeros,c=color,marker=m)
然后在循环之前创建轴实例

fig3d=plt.figure()
ax=Axes3D(fig3d)

for k in range(len(s)):
    system(s[k],b,r,color[k],markers[k], ax)

plt.show()
这是所有绘图都添加到
ax
。然后,您可能需要考虑在
system()
函数之外设置轴标签等。将其拆分为两个函数,一个用于设置绘图,另一个用于创建所需数据并进行绘图