首页 > 解决方案 > 绘制特定区域

问题描述

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

  1. 如果 (x < 5 < y < 5+x) 或 (5 <= y < x) 或 (x= 5 and 5 < y < 10) 则函数 f_1 是最大函数。
  2. 如果 (5 < x < y < 5 + x) 或 (x <= y < 5) 则函数 f_2 是最大函数。
  3. 如果 (y < x < 5) 或 (y < 5 < x) 或 ( x = 5 and y < x) 则函数 f_3 是最大函数。
  4. 如果 y > x+5 则函数 f_4 是最大函数。

我需要用 x-axis = x 和 y-axis = 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()

结果应该是如下图所示:

图二

标签: pythonpython-3.xnumpymatplotlib

解决方案


当您将初始数组设置为 -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陈述。你如何安排你的逻辑语句很重要,特别是因为你有很多条件,其中一些相互重叠。


推荐阅读