首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >曲线上有条件的Matplotlib等高线图

曲线上有条件的Matplotlib等高线图
EN

Stack Overflow用户
提问于 2020-02-05 07:53:57
回答 1查看 334关注 0票数 0

假设我想绘制z=0 where z=(19*y^3-6*x*y-1)的等高线。我可以使用以下代码:

代码语言:javascript
运行
复制
x = np.linspace(-2,2,1000)
y = np.linspace(-1,1,1000)
X,Y = np.meshgrid(x,y)
z = (19)*Y**3-6*X*Y-1
plt.figure()
plt.contour(z,0)
plt.show()

现在我想要显示曲线中3*19*y^2-6*x<0在实线中的部分,以及3*19*y^2-6*x>0在虚线中的部分。基本上,我是在做系统的某种稳定性分析,我想根据dz/dy是正的还是负的,以不同的方式显示z=0曲线的不同区域。

我所能想到的就是自己定位两部分的坐标,并使用scatter绘图来用不同的颜色(或线条样式)来显示曲线的两部分。我也知道如何在Mathematica中轻松地做到这一点。我只是想知道matplotlib中是否有更好的解决方案来完成这项工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-05 08:26:01

也许下面的方法很有趣,但并不完美?

使用为3*19*y^2-6*x>0条件创建变量z2。除了靠近z的地方,z2会被擦除到任何地方。然后用红蓝颜色贴图对其进行着色,红色表示正片,蓝色表示负片,白色在0附近。

背景设置为黑色,轮廓颜色设置为白色,以便具有足够的对比度。

请注意,contour图和imshow都需要设置extent参数才能获得信息轴。

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2, 2, 1000)
y = np.linspace(-1, 1, 1000)
X, Y = np.meshgrid(x, y)
z = (19) * Y ** 3 - 6 * X * Y - 1
z2 = 3 * 19 * Y ** 2 - 6 * X
z2 = np.where(np.abs(z) < 0.2, z2, np.NaN)
plt.gca().set_facecolor('black')
plt.imshow(z2, cmap='coolwarm', vmin=-1, vmax=+1, alpha=1, extent=[-2, 2, -1, 1], origin='lower')
plt.contour(z, 0, extent=[-2, 2, -1, 1], zorder=3, colors='white')
plt.show()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60067194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档