Python Graph,显示三个变量之间的关系

时间:2013-03-13 01:28:09

标签: python math graph relationship

我有一个Python函数,其参数为SlopeDistance,并返回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 个答案:

答案 0 :(得分:2)

问题有点不清楚,所以我将尝试涵盖所有可能性:

a)如果你有两个变量的函数,比如func,你可以为这两个变量的许多组合执行该函数,你可以使用matplotlib绘制一个等高线图(也许)分别在x和y轴上的坡度和距离,以及轮廓显示的成本。有关示例,请参阅here

b)如果您有以下功能:

Cost = func(Slope,Distance)

...你知道Cost和其他两个变量之一的值,那么你可以:

b1)再写两个函数(例如funcSlope(Cost,Distance)funcDistance(Slope,Cost)),从已知变量中产生未知变量,或者

b2)如果函数func不可用,那么你不知道它是如何计算的,因此不能明确地写出我为选项1建议的函数,或者很难分析地反转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()时,您将看到需要为未知变量指定边界。