首页 > 解决方案 > 如何根据 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,然后再画两条线连接odds和中的值evens

例如,在我第一次画线之后all_nums,我得到了 在此处输入图像描述

我最终的预期图表应该是 在此处输入图像描述

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

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

请注意,我的实际项目比这个例子更复杂,其中第一行看起来像 在此处输入图像描述 我需要连接所有的谷点和所有的峰值点,所以我不能简单地应用像在绘图时改变odds = [1,3,5,7,9]的技巧odds = [1,2,3,4,5,6,7,8,9,10],因为我希望曲线也可以在点之间的连接处平滑。

感谢您的帮助!

标签: matplotlibintervalssubplot

解决方案


我为偶数和奇数行做了类似的事情。奇数看起来 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()

推荐阅读