在matplotlib图中设置轴限制

时间:2014-04-24 11:59:23

标签: python matplotlib

我有五个时期的数据及其概率,我想用20000次模拟它 使用泊松分布,我希望x轴从0-1开始,我试过但我在这里用我的代码存货: 是否有任何方法可以比我做的更容易编码

import numpy
import matplotlib.pyplot
import pylab
import numpy as np
from pylab import *


data = []
inventory = 0

for j in range(4000):
    totalOrder= 0
    totalProduction = 0
    for i in range (5):

        # calculate order
        mean = 105
        order = np.random.gamma(mean, 20000)
        totalOrder = totalOrder+order


        # calculate production
        production = numpy.random.choice([80, 100, 130, 150], p = [0.2, 0.50 ,0.20, 0.1])

        totalProduction = totalProduction + production

        # calcculate new inventory
        inventory = inventory + production - order
        if inventory < 0:
            inventory = 0

    # calculate fill rate for last 5 orders
    fr = float(totalProduction) / float(totalOrder)
    if fr > 1:
        fr = 1

    # append FR to dataset
    data.append(fr)


grid(True)
xlabel('Fill Rate')
ylabel('Density')
title('Simulate the system for 20000 week')
matplotlib.pyplot.hist(data, normed = True)
pylab.show()

1 个答案:

答案 0 :(得分:1)

您想要使用matplotlib的set_xlim method作为轴。看看他们的一些例子this one,例如,更好地了解你可以用模块做些什么。

对于您的代码,您需要添加:

ax = plt.gca()
ax.set_xlim(0,1)

对于某些优化,我发现您在不同的别名下添加了相同的模块(例如,您已导入numpy及其别名np,这些也是由pylab导入的)。它告诉我你还没有很多使用该语言的经验。在您继续学习的过程中,您最终会将所有这些导入减少到几个,例如

import numpy as np
import matplotlib.pyplot as plt

并且您将调用属于这些命名空间的正确函数(例如plt.show(),而不是pylab.show - pylab对于numpy和matplotlib包只不过是一层薄薄的面纱。 / p>

您可以对代码进行一些优化(例如,对循环进行矢量化),但考虑到当前的级别,我认为这会使其过于复杂。此外,循环确实使你更清楚你正在做什么。

也许只有一个提示:在python中,当你想要更新一个数字变量(int,float,...)时,你可以这么做:

inventory += production - order

它可以帮助您避免再次输入inventory,从而减​​少将来发生错误的可能性,如果您想对代码进行更改。