Matplotlib:在采样数据时动态重新标记x轴

时间:2018-08-21 01:42:17

标签: python matplotlib

我正在绘制一些时间序列数据;我的时间序列很长(〜68k行)。我有一个小的辅助函数,它可以通过对列表进行切片来获取一小部分子集,进行一些分析,然后绘制结果

由于我仅传入切片的子集,因此结果图为零索引。我希望它被绝对索引。如何动态更改标签?

这与我正在查看的内容类似

data = load_data() # very long
start, end = get_start_end_from_cmd_line()
subset = data[start, end]
data_to_plot = process_data(subset)

plt.plot(data_to_plot, label="P1")
plt.show()

问题是我的图形x轴的范围是0(end - start),而不是startend。我想动态更改标签,因此它们对于我正在查看的任何尺寸图都是正确的,并且在我平移或缩放时也可以正确

1 个答案:

答案 0 :(得分:1)

您需要包括与计算出的y值对成对的x值的范围,否则matplotlib将默认以x轴的基数为零:

类似的东西,也许:

import matplotlib.pyplot as plt


def get_start_end_from_cmd_line():   # substitute for your own function
    return 5, 9

def load_data():                     # substitute for your own function
    x, y = (list(range(3, 13)), list(range(10)))
    return x, y

xdata, ydata = load_data()
start, end = get_start_end_from_cmd_line()
subsetx, subsety = xdata[start: end], ydata[start: end]   # slice both the x and the corresponding y
plt.plot(subsetx, subsety, label="P1")
plt.show()

由于xdata可能仅隐含在您的数据集中,因此您将需要构造一组x值:(在某些情况下,(原始x数据从零开始,是整数,并且以1递增)最简单的方法),您可以使用它来代替:

xdata = range([start: end])   # matplotlib will also accept a range object i/o a list so you do not need to do list(range([start: end]))

签出slice来构建更复杂的序列