显示三个变量关系的Python图表
我有一个Python函数,它有两个参数:Slope
(坡度)和Distance
(距离),这个函数会返回一个结果Cost
(成本)。
坡度的范围是1到80,距离的范围是1到20000,而成本可以是任何正数。
我想了解坡度、距离和成本之间的关系。最好的方法是什么,来展示这三个变量之间的关系?我该怎么做呢?
比如说,如果坡度增加而距离减少,成本会发生什么变化?如果坡度和距离都增加,成本又会怎样呢?等等……
def func(Slope, Distance):
...
return cost
SlopeList = list(xrange(81))
DistanceList = list(xrange(20000)
myList= []
for Distance in DistanceList:
for Slope in SlopeList:
cost = func(Slope, Distance)
var = (Slope, Distance, Cost)
append.myList(var)
1 个回答
2
这个问题有点模糊,我会尽量涵盖所有可能的情况:
a) 如果你有一个涉及两个变量的函数,比如叫做 func
,并且你可以对这两个变量的很多组合进行计算,那么你可以使用 matplotlib
来绘制一个等高线图,x轴和y轴分别表示坡度和距离,而成本则通过等高线来表示。你可以在 这里 查看一个示例。
b) 如果你有一个这样的函数:
Cost = func(Slope,Distance)
... 并且你知道成本和另外两个变量中的一个的值,那么你可以选择:
b1) 写两个新的函数(例如 funcSlope(Cost,Distance)
和 funcDistance(Slope,Cost)
),用已知的变量来计算未知的变量,或者
b2) 如果你无法使用 func
这个函数,也就是说你不知道它是怎么计算的,因此无法明确写出我在第一种选择中提到的函数,或者如果从其他两个变量中反向求出坡度或距离很困难,你可以使用一些代码来数值计算未知的变量,类似于这样:
def func(Slope,Distance):
# Imagine that we didn't know the definition of this function
# so we couldn't write funcSlope() explicitly
return Slope * Distance**0.1234
def funcSlope(Cost,Distance,minSlope,maxSlope):
def fs (Slope):
return Cost - func(Slope,Distance)
return scipy.optimize.brentq(fs, minSlope, maxSlope)
print (func(2,6))
print (funcSlope(2.4949,6,0,10))
... 其输出结果是:
2.494904118641096
1.999996698357211
你会发现,在调用 brentq()
时需要为未知变量指定范围。