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

问题描述

我有这三个列表

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

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

例如,在我第一次绘制all_nums的线之后,我得到了

enter image description here

我最终的期望图应该是

enter image description here

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

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

请注意,我的真实项目比本示例要复杂得多,其中第一行看起来像

enter image description here

而且我需要连接所有的谷点和所有的峰点,所以我不能简单地应用诸如在绘制时将odds = [1,9]更改为odds = [1,2,9,10]之类的技巧,因为我希望曲线之间的连接也能保持平滑点。

谢谢您的帮助!

解决方法

我对偶数行和奇数行做了这样的事情。奇数看起来是1:1,甚至看起来是y-2。

odds = [1,3,5,7,9]
evens = [2,4,6,8,10]
all_nums = [2,1,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()