在matplotlib中自动缩放y时设置x轴标签范围

时间:2018-05-14 11:45:55

标签: python matplotlib

我发现使用matplotlib很难实现感觉应该非常简单的东西。我有1000个数据点的时间序列,相隔10秒。 我想绘制它们,以便x轴范围正确标记为0到10,000s。我希望自动选择y轴值。

无论我尝试什么,我似乎无法让matplotlib在x轴上显示任何标签,而不是数组中数据点的数量(即0-1000)。我试过了:

绘图两次。首先让它自动缩放,然后调用plt.axis()来检索x和y限制,然后将它们存储为第二次调用plt.axis([a,b,c,d])。它只绘制了0-1000。不知何故,它只是忽略了我并恢复到0-1000。

我试过了:

ax = plt.subplot(111)  

ax.xaxis.set_data_interval(0, 10000)

plt.xlim(0, 10000)

无济于事,以及我现在删除和遗忘的许多其他事情。我无法相信我现在已经浪费了几个小时了!

有人可以帮忙吗?谢谢!

编辑:我被问到一个最小的例子 - 这里有两个说明了我找到的两个结果,

import matplotlib.pyplot as plt
tseries=[1,2,3,4,5,6,7,8,9,10]
plt.plot(tseries)
ax = plt.subplot(111)  
ax.xaxis.set_data_interval(0, 10000)
plt.show()

enter image description here

这个被忽略

import matplotlib.pyplot as plt
tseries=[1,2,3,4,5,6,7,8,9,10]
plt.plot(tseries)
plt.xlim(0, 100)
plt.show()

enter image description here

这个数据会压缩所有数据,使其保持在0-10范围内。

我尝试过的所有方法都产生了以上两个结果中的一个

基本上我只想要第一个带有第二个轴的图。

2 个答案:

答案 0 :(得分:1)

也许我误解了这个问题,但这应该像创建一个包含你想要的时间值/标签的X系列一样简单。无需对轴范围进行任何限制:

values

enter image description here

Map<String, List<Result>> resultMap = bulkGetResults(allResourceIds).stream() .collect(groupingBy(Result::getResourceId)); strLst.stream().forEach(id -> resultMap.putIfAbsent(id, new ArrayList<>())); 有1000个数据点。您需要创建另一个包含与每个值相关联的时间的数组。在您的原始问题中,您没有指定X数组,因此它只是根据索引(0-9)绘制您的值

因为您知道每个值记录间隔10秒发生,所以它应该像生成1000个项目列表一样简单,值为0-1000,然后将每个项目乘以10以获得实际&#34;记录&# 34;次

答案 1 :(得分:0)

终于找到了一个有效的解决方案。可能有更好的方法。

x = np.arange(0.0, total_time, total_time/len(tseries))
y = np.array(tseries)
plt.plot(x.flatten(),y.flatten())

编辑:

结果有时会失败,说x和y的长度不一样 我添加了这个黑客以防止:

if len(x)!=len(y):
    l=min(len(x),len(y))
    x=x[:l]
    y=y[:l]

我猜这是由于创建x时“total_time / len(tseries”)中的舍入错误引起的。
编辑2:T先生在下面指出,np.linspace()可以用来避免舍入错误。