我尝试用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()
答案 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()