我正在绘制一些时间序列数据;我的时间序列很长(〜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)
,而不是start
到end
。我想动态更改标签,因此它们对于我正在查看的任何尺寸图都是正确的,并且在我平移或缩放时也可以正确
答案 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
来构建更复杂的序列