繁体   English   中英

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

[英]Python visualization of a function with 2 variables

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

情节

根据matplotlib文档,您必须将origin设置为“ lower”:

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默认为标准值 ,在这种情况下为左上角。 因此,只有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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM