python - 绘制特定区域
问题描述
我是 python 新手。问题在于,假设我们有两个参数 x 和 y,以及四个函数 f_1、f_2、f_3 和 f_4。假设我们知道:
- 如果 (x < 5 < y < 5+x) 或 (5 <= y < x) 或 (x= 5 and 5 < y < 10) 则函数 f_1 是最大函数。
- 如果 (5 < x < y < 5 + x) 或 (x <= y < 5) 则函数 f_2 是最大函数。
- 如果 (y < x < 5) 或 (y < 5 < x) 或 ( x = 5 and y < x) 则函数 f_3 是最大函数。
- 如果 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()
结果应该是如下图所示:
解决方案
当您将初始数组设置为 -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
陈述。你如何安排你的逻辑语句很重要,特别是因为你有很多条件,其中一些相互重叠。
推荐阅读
- python - 如何在变体大小的reduce_mean之后堆叠张量在张量流中聚集?
- visual-studio - 为什么 Option 上的字体在 Visual Studio 2017 中不断变化?
- angular - zone.js 承诺即使使用 catch 块也会返回 Unhandled Promise Rejection 错误
- android - 自定义键盘无法写入 TextView
- tensorflow - TensorFlow 2.0 的 TensorFlow 数据验证
- python - 函数只读取一行数据
- python - 在 python 中转置/重塑数据
- javascript - 如何在其他 JavaScript 文件中要求 NodeJS 模块?
- c# - 列标题 - 如何设置底部边框厚度 > 1
- javascript - 如何明智地旋转这个反关闭并以相反的顺序开始倒计时