【问题标题】:Plotting Specific Regions绘制特定区域
【发布时间】:2019-08-06 01:39:27
【问题描述】:

我是 python 新手。问题在于,假设我们有两个参数 x 和 y,以及四个函数 f_1、f_2、f_3 和 f_4。假设我们知道:

  1. 如果 (x
  2. 如果 (5
  3. 如果 (y
  4. 如果 y > x+5 则函数 f_4 是最大函数。

我需要绘制一个 x 轴 = x 和 y 轴 = y 的图,显示每个函数是最大函数的区域。

我使用了下面的代码,但是下面显示的结果图并不准确。

import numpy as np
from matplotlib import pyplot as plt

x = np.arange(0,10,.1)
y = np.arange(0,15,.2)
x,y = np.meshgrid(x,y) 
maxf = np.zeros(shape = x)
maxf.fill(-9999.99) 

for i in range(len(x)):
    for j in range(len(y)):
        if j<i<5 or j<5<i:
            maxf[i,j] =1
        elif i<5<=j<i+5 or 5<=j<i:
            maxf[i,j] =2
        elif 5<i<=j<i+5 or i<=j<5:
            maxf[i,j] =3
        elif i == 5 and j<5:
            maxf[i,j]=1
        elif i == 5 and 5<=j<10:
            maxf[i,j]=2
        elif j >= 5+i:
            maxf[i,j]=4


plt.contourf(x,y,maxf)
plt.colorbar()
plt.show()

结果应该是这样的:

【问题讨论】:

  • 请发布您尝试过的内容。
  • 您的问题到底是什么?你尝试了什么?
  • @BenT 这实际上是我之前问过你的问题的简化版本,正如我在那个问题中提到的那样,当我使用 -9999.99 而不是 np.nan 时,情节变得非常奇怪。所以,我只是简化了每个函数是最大函数的条件,看看在这些新条件下是否更容易绘制图
  • 所以发布情节和你用来制作它的代码。如果我们看不到您拥有的东西,我们将无能为力...
  • 创建maxf时需要x.shape

标签: python python-3.x numpy matplotlib


【解决方案1】:

当您将初始数组设置为 -9999.99 时,您现在必须确保仅对您想要的 1-3 之间的值进行轮廓化。由于该值的大小要大得多,因此它不会包含在您的图中。使用以下方法设置绘图的等高线水平:

plt.contourf(x,y,maxf,[0,1,2,3])

产量:

更新

我之前没有注意到,但是您使用 i,j 就像它们是数字一样,但它们实际上代表了数组的索引,这会影响您的计算。您需要知道索引和值才能使用enumerate。如果这仍然不正确,那么您需要根据您的条件重新审视您的逻辑。

import numpy as np
from matplotlib import pyplot as plt

y = np.arange(0,15,.01)
x = np.arange(0,10,.01)

Y,X = np.meshgrid(y,x) 

maxf = np.zeros(shape = Y.shape)
maxf.fill(-9999.99) 


for i,x_ in enumerate(x):
    for j, y_ in enumerate(y):
        if y_<x_<5 or y_<5<x_:
            maxf[i,j] =3
        elif x_<5<=y_<(x_+5) or 5<=y_<x_:
            maxf[i,j] =1
        elif 5<x_<=y_<(x_+5) or x_<=y_<5:
            maxf[i,j] =2
        elif x_ == 5 and y_<5:
            maxf[i,j]=3
        elif x_ == 5 and y_>=5:
            maxf[i,j]=1
        elif y_ >= (5+x_):
            maxf[i,j]=4


plt.contourf(X,Y,maxf,[0,1,2,3,4])
plt.colorbar()
plt.show()

最后说明

仅仅因为您添加了一个条件并不意味着如果首先满足另一个条件,它将被评估。在这种情况下,您的第 4 个函数永远不会为真,因为始终满足其他条件之一。如果您首先需要该条件,则将其设为您的第一个 if 语句。你如何安排你的逻辑语句很重要,特别是因为你有很多条件,其中一些相互重叠。

【讨论】:

  • 亲爱的@BenT,感谢您的大力帮助。不幸的是,情节再次不准确。我附上了一张图片,显示了结果图的样子。我应该说我添加了另一个条件,它也涵盖了 y > = x+5 的区域。我假设如果发生这种情况,那么 f_4 是最大函数。
  • 编辑了我的答案。另外,为了将来参考,您应该考虑对答案进行投票,并且在解决问题之前不要选择它作为答案。
  • 一个简单的问题@Bent;我只是仔细检查了所有条件,发现它们之间没有重叠。看来剧情又不准确了。例如,当 x
  • 其实剧情应该和我放在主帖末尾的图一模一样。 i.stack.imgur.com/gPkRC.png
  • 编辑了我的答案。你的数字错了,哪个数字在哪里。
猜你喜欢
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多