显示三个变量关系的Python图表

0 投票
1 回答
1490 浏览
提问于 2025-04-17 18:53

我有一个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() 时需要为未知变量指定范围。

撰写回答