具有2个变量的函数的Python可视化

时间:2018-02-23 16:23:55

标签: python python-3.x numpy matplotlib

我尝试用2个变量可视化一个简单的函数。当函数为x**2 + y**2时,绘图上的最小值按预期位于(0,0),但当函数为(x + 1)**2 + (y + 1)**2时,最小值位于(-1,1)。 x坐标是正确的,但y坐标不是(应该是(-1,-1))。有人可以解释为什么当我向x添加任何值时,最小值的x坐标总是正确的,但是当我向y添加任何数字时,最小值的y坐标总是位于不正确的位置?我该如何解决?

import numpy as np
import matplotlib.pyplot as plt

# Define the function
def circle(x, y):
    return (x + 1)**2+(y + 1)**2


# Grid for plotting
x = np.linspace(-3, 3, num = 101)
y = np.linspace(-3, 3, num = 101)
X, Y = np.meshgrid(x, y)


# 2D
plt.figure()
plt.imshow(circle(X, Y), extent = [-3, 3, -3, 3], cmap=plt.cm.jet)
plt.colorbar()

plt.show()

Plot

1 个答案:

答案 0 :(得分:0)

根据matplotlib documentation,您必须将origin设置为"降低":

import numpy as np
import matplotlib.pyplot as plt

# Define the function
def circle(x, y):
    return (x + 1) ** 2 + (y + 1) ** 2

# Grid for plotting
x = np.linspace(-3, 3, num = 101)
y = np.linspace(-3, 3, num = 101)
X, Y = np.meshgrid(x, y)

Z = circle(X, Y)

plt.imshow(Z, cmap = "jet", extent=[-3, 3, -3, 3],  origin = "lower")
plt.colorbar()
plt.show()

如果未指定origin,imshow defaults to the standard value,在这种情况下是左上角。因此只有y值受到影响。

或者,您也可以使用pcolor

import numpy as np
import matplotlib.pyplot as plt

# Define the function
def circle(x, y):
    return (x + 1) ** 2 + (y + 1) ** 2

# Grid for plotting
x = np.linspace(-3, 3, num = 101)
y = np.linspace(-3, 3, num = 101)
X, Y = np.meshgrid(x, y)

Z = circle(X, Y)

plt.pcolor(X, Y, Z, cmap = "jet")
plt.axis([-3, 3, -3, 3])
plt.colorbar()

plt.show()