如何根据 matplotlib 中的间隔绘制线条?

How to draw lines based on intervals in matplotlib?

我有这三个列表

odds = [1,3,5,7,9]
evens = [2,4,6,8,10]
all_nums = [2,1,4,3,6,5,8,7,10,9]

我需要先画一条线来显示 all_nums 中的值,然后再画另外两条线来连接 oddsevens 中的值。

比如我先画了all_nums这条线之后,我得到了

我最终的预期图表应该是

我不确定如何绘制红线和绿线,因为它们是根据 x 轴上相对于蓝线的“间隔 2”生成的。

我用我当前的代码创建了一个 repl.it

注意,我的真实项目比这个例子更复杂,其中第一行看起来像 而且我需要连接所有的谷点和所有的峰点,所以我不能简单地在绘制时将odds = [1,3,5,7,9]更改为odds = [1,2,3,4,5,6,7,8,9,10]等技巧,因为我希望曲线之间的连接也可以平滑点.

感谢您的帮助!

我对偶数行和奇数行做了类似的事情。看起来很奇怪 1:1 甚至看起来像 y-2.

odds = [1,3,5,7,9]
evens = [2,4,6,8,10]
all_nums = [2,1,4,3,6,5,8,7,10,9]
even_sep=[]
odd_sep=[]
plt.plot(range(len(all_nums)), all_nums, label='odds and evens')
for draw_num_iter in range(len(all_nums)):
  draw_num = all_nums[draw_num_iter]
  plt.annotate(draw_num, xy=(draw_num_iter, draw_num), size=20)
for i in range(len(evens)):
  even_sep.append(evens[i]-2)
plt.plot(even_sep,evens,'ro-')
for i in range(len(odds)):
  odd_sep.append(odds[i])
plt.plot(odd_sep,odds,'g')  
plt.legend(loc='best')
plt.show()