我们如何通过更改python3中的2个元素来绘制3d向量的平均值的3d图像?

问题描述 投票:0回答:1

我想使用3d功能在python3中绘制z = (x + y + 1)/3xy的域是整数,范围在[0,29]中超过30个整数点。我现在面临两个问题。

  1. xyz的尺寸必须相同...实际上,xy需要30点,而z需要30 * 30 = 900点。为了绘制图形,我还需要将xy的数据点数量也增加到900。成功绘制时如何使它们保持30个?

  2. 如何实现映射(x,y,z)?我不确定当前我的实现是否成功显示了结果。这是因为我不太了解一对z如何映射(x,y)。我的实现正确吗?

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


def my_mean(l):
  k = len(l)
  s = 0.0
  for elem in l:
    s = s + elem
  return s / k


if __name__ == "__main__" :
  N = 30
  x = np.linspace(1, 30, N*N) # I want to make this length 30
  y = np.linspace(1, 30, N*N) # this as well...
  constants = [1] * N*N
  z = []

  for i in range(0, N):
    for j in range(0, N):
      vec = {x[i], y[j], constants[i + N*j]}
      z.append(my_mean(vec)) # is this correct??

  fig = plt.figure()
  ax = fig.add_subplot(111, projection='3d')

  ax.scatter3D(x, y, z, label ="Mean")
  ax.set_title("Scatter Plot of Mean")

  ax.set_xlabel('x')
  ax.set_ylabel('y')
  ax.set_zlabel('z')
  ax.legend()

  plt.show()                                                                                                                                                                                                                  
python-3.x matplotlib 3d
1个回答
0
投票

看看NumPy的meshgrid函数。对于两个向量meshgridx。它创建二维坐标数组,然后可将其用于矢量化计算。

[回答您的问题:是的,实际上,您的实际yx(也)必须是y数组,但是如上所述,30 x 30将使用初始向量为您正确生成这些数组长度为meshgrid

这是我的(缩短的)代码:

30

输出:

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D N = 30 x = np.linspace(1, 30, N) y = np.linspace(1, 30, N) xx, yy = np.meshgrid(x, y) z = (xx + yy + 1) / 3 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter3D(xx, yy, z, label="Mean") ax.set_title("Scatter Plot of Mean") ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') ax.legend() plt.show()

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.