如何在Python中绘制函数的输出?
这三个函数为我提供了从状态0到下一个365个状态(或天数)的客户数量及其订单的进度。在如何在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
功能状态\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)文件中获取这些值。我该怎么做?我会非常感激的