如何在Python中绘制函数的输出?

如何在Python中绘制函数的输出?,python,matplotlib,Python,Matplotlib,这三个函数为我提供了从状态0到下一个365个状态(或天数)的客户数量及其订单的进度。在功能状态\u evolution中,我想绘制第行的输出 custA = float(custA*1.09**(1.0/365)) A = sum(80 + random.random() * 50 for i in range(ordsA)) 根据生产线的输出 custA = float(custA*1.09**(1.0/365)) A = sum(80 + random.random() * 50 fo

这三个函数为我提供了从状态0到下一个365个状态(或天数)的客户数量及其订单的进度。在
功能状态\u evolution
中,我想绘制第行的输出

custA = float(custA*1.09**(1.0/365))
A = sum(80 + random.random() * 50 for i in range(ordsA))
根据生产线的输出

custA = float(custA*1.09**(1.0/365))
A = sum(80 + random.random() * 50 for i in range(ordsA))
对custB执行同样的操作,这样我可以以图形方式比较它们的输出

def get_state0():
    """ functions gets four columns from base data and finds their state 0"""
    statetype0 = {'custt':{'typeA':100,'typeB':200}}
    orderstype0 = {'orders':{'typeA':1095, 'typeB':4380}}
    return  {'custtypeA' : int(statetype0['custt']['typeA']),
             'custtypeB' : int(statetype0['custt']['typeB']),
             'ordstypeA': orderstype0['orders']['typeA'],'A':1095, 'B':4380,
             'ordstypeB':orderstype0['orders']['typeB'], 
             'day':0 }  


def state_evolution(state):
    """function takes state 0 and predicts state evolution """
    custA = state['custtypeA']
    custB = state['custtypeB']
    ordsA = state['ordstypeA']
    ordsB = state['ordstypeB']
    A = state['A']
    B = state['B']
    day = state['day']   
    # evolve day
    day += 1
    #evolve cust typea
    custA = float(custA*1.09**(1.0/365))
    #evolve cust typeb
    custB = float (custB*1.063**(1.0/365))
    # evolve orders cust type A 
    ordsA += int(custA * order_rateA(day))
    A = sum(80 + random.random() * 50 for i in range(ordsA))
    # evolve orders cust type B 
    ordsB += int(custB * order_rateB(day))
    B = sum(70 + random.random() * 40 for i in range(ordsB))
    return {'custtypeA':custA ,'ordstypeA':ordsA, 'A':A, 'B':B,
            'custtypeB':custB, 'ordstypeB':ordsB, 'day': day}


def show_all_states():
    """ function runs state evolution function to find other states"""
    s  = get_state0() 
    for day in range(365):
        s = state_evolution(s)

        print day, s

您应该执行以下操作:

  • 修改
    custA
    函数,使其返回一个序列(列表、元组),例如365个项目。或者,在列表理解或for循环中使用
    custA
    ,以获得365个结果的序列
  • ordsA
    函数执行相同的操作,以获取其他序列
  • 从现在起,你可以根据自己的需要做不同的事情

    如果希望两个绘图平行(叠加),则:

    pyplot.plot(custA_result_list);
    pyplot.plot(ordsA_result_list);
    pyplot.show()
    
    如果要关联数据,可以使用散点图(速度更快)或带有点标记的常规图(速度较慢但更可自定义):

    最后,如果数据是不规则采样的,还可以提供横轴值的序列。例如,这将允许只绘制工作日的结果,而不会“崩溃”周末(否则周五和周一之间的差距看起来像一天):

    希望这有帮助

    编辑:关于excel,如果我理解正确,您已经有一个csv文件。然后,您可以使用
    csv
    python模块,或者自己这样阅读:

    with open('file.csv') as csv_in:
        content = [line.strip().split(',') for line in csv_in]
    

    现在,如果您有一个实际的
    .xls
    .xlsx
    文件,请使用您可以下载的
    xlrd
    模块,或者在命令提示符下运行
    pip install xlrd

    不知道从何处启动它,例如创建一个单独的函数或将其包含在上述代码中,也不太习惯matplotlib要绘制一个变量与另一个变量的对比图,只需使用绘图函数:
    将matplotlib.pyplot导入为plt plt.plot(var1,var2)
    或使用散布函数:
    plt.scatter(var1,var2)
    然后可以使用
    plt.savefig()
    -方法将这些图保存为.png、.jpg、,或.eps文件。或者,您可以使用我编辑过的状态演化函数直接显示图形,如“x=custA”“y=ordsA”“plt.scatter(x,y)”“plt.show()”。但是当我运行show_all_states函数时,它只给我第1天的一个点,我希望它运行365天,然后在最后绘制图形(绘制365个数据点),感谢您的帮助。还有一件事需要帮助。如果您在变量statetype0中看到第一个函数get_state0(),我已经为键键入了值,而不是这样做,我希望从csv(excel)文件中获取这些值。我该怎么做?我会非常感激的