在matplotlib中绘制(隐式)方程的绘图系统

6

首先,我是新手,对于Python和Matplotlib并不熟悉。我需要在一个图中绘制几个隐式方程组。

这些方程的形式为:

3x+2y=1

除了首先将方程式明确化(即 y=...)之外,是否有一种简单的方法来绘制它们?

2个回答

7
import numpy as np
import matplotlib.pyplot as plt
# Note the order of y,x.
y,x=np.ogrid[-5:5:100j,-5:5:100j]
plt.contour(x.ravel(),y.ravel(),3*x+2*y,[1])
plt.show()

alt text


对于三维空间,我建议使用Mayavi代替。(我会删除我的答案,因为你的有图片 :)) - Sven Marnach
@Sven Marnach:我喜欢你的解决方案,因为它使用的内存较少。也许可以恢复它? - unutbu
好的,根据您的特殊要求 :) - Sven Marnach
谢谢你们俩。然而有一件事看起来是不对的;例如,3x+2y=1 & 3x+4y=5应该相交于(-1,2)。但MPL却给了我一个交点(2,-1)。这是怎么回事? - Milo Wielondek
澄清一下 - 上面的图表与y =(1-3x)/ 2的图表不同(即3x + 2y = 1的显式版本),因此交点是错误的。这是主要问题 - 您的解决方案没有给出正确的图表。 - Milo Wielondek
@mewoshh:感谢指出我的错误。我喜欢Sven的回答,但只是想为了自己的清醒而纠正我的。 - unutbu

4
你可以使用contour()在二维空间中进行隐式绘图:
x = numpy.linspace(-2., 2.)
y = numpy.linspace(-2., 2.)[:, None]
contour(x, y.ravel(), 3*x + 2*y, [1])

在三维方面,我建议使用 Mayavi 而不是 matplotlib。

嗯..这似乎生成了一个不同于y=(1-3x)/2的图形,但它们应该是相同的。有什么想法为什么会这样? - Milo Wielondek
@mewoshh:你能展示一下你的具体代码吗?应该是这样的contour(x.ravel(), y, y-(1-3*x)/2, [0])。而且画出的图形应该与上面的代码相同。 - Sven Marnach
这与contour(x.ravel(), y, y-(1-3*x)/2, [0])相同。问题在于这与事实上的图形y=(1-3x)/2不同。将其与x=np.arange(-6,6,0.01); y=(1-3*x)/2; plot(x,y)进行比较。 - Milo Wielondek
@mewoshh:你是对的,行和列搞混了!立刻会进行更正… - Sven Marnach
它绘制了转置图表。现在已经修复。 - Sven Marnach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接