如何将方程式绘制到具有重新定义的索引的数组中

时间:2019-07-12 15:42:46

标签: python

所以我有一个方程可以说:x^2 + y^2

当前,我可以创建一个数组,用于定义方程式,根据输入参数计算数组并​​打印出数组:

def equation(x,y):
  return x**2 + y**2

def calculate(x, y, xmin, ymin):
  out = []
  for i in range(x_min, xs):
    row = []
    for j in range(y_min, ys):
      row.append(equation(i, j))
    out.append(row)
  return out

输出数组根据指标计算值 输出,使(0,0)位于左上方。给定具有长度和宽度的数组,如何计算方程式,以使(0,0)居中并遵循笛卡尔平面?

2 个答案:

答案 0 :(得分:0)

要使数据围绕0、0、0居中并绘制结果,可以执行以下操作:

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

def equation(x,y):
  return x**2 + y**2

x = [(i-50)/10 for i in range(0,100,1)]
y = x
z = [equation(i, j) for i, j in zip(x, y)]

# plot the function
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.scatter(x, y, z, c='r', marker='o')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# rotate the plot so we can see the 3 dimensions
for angle in range(0, 360):
  ax.view_init(30, angle)
  plt.draw()
  plt.pause(.001)

结果:

enter image description here

答案 1 :(得分:0)

基本上,您只需要重新定义要迭代的内容,即可将(0, 0)放在中间。我建议您尽管使用numpy之类的库,并利用矢量化函数来加快(并简化)代码。例如:

import numpy as np
x = np.linspace(-1, 1, 11)  # create 11 points arranged from -1 to 1
X, Y = np.meshgrid(x, x)  # this produces the input values you'd get out of your double loop
result = np.square(X) + np.square(Y)  # your equation, applied to everything at once

我做了一个奇数个以0为中心的点,因此我们实际上将在中心有一个(0, 0)输入值。我们可以使用以下内容绘制结果:

from matplotlib import pyplot as plt
plt.imshow(result)

enter image description here

请注意,此处的轴刻度是错误的,因为imshow不在乎我们的原始输入是什么,但是中间的黑点是您的(0, 0)输入点。