在matplotlib图中设置轴限制[重复]
Posted
技术标签:
【中文标题】在matplotlib图中设置轴限制[重复]【英文标题】:Set axis limits in matplotlib graph [duplicate] 【发布时间】:2014-06-09 16:50:21 【问题描述】:我有五个时期的数据及其概率,我想用 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()
【问题讨论】:
这段代码有效吗?如果不是,它有什么作用?错误(提供追溯)?意外输出(提供输入以及预期和实际输出)? 是的,它可以运行代码,但我需要 X 轴从 0-1 开始,当我想绘图时它出现另一个数字,我希望 X 轴从 0 - 1 开始。 【参考方案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 包上的一层薄纱。
您可以对代码进行更多优化(例如矢量化循环),但鉴于您当前的水平,我认为这会使其过于复杂。此外,循环确实使您正在做的事情更加明确。
也许只有一个提示:在 python 中,当你想更新一个数字变量(int、float、...)时,你可以这样做:
inventory += production - order
它使您无需再次输入inventory
,因此如果您想对代码进行更改,将来出错的机会就会减少。
【讨论】:
非常感谢您的回复, @user3462393,那么请考虑“接受”答案,这是解决 SO 问题的通常方式。以上是关于在matplotlib图中设置轴限制[重复]的主要内容,如果未能解决你的问题,请参考以下文章
matplotlib - 子图中的 twinx 轴没有 xlabel 和 xticks