2

我有一个嵌套列表:

nested=[[35,36,37],[34,35,36,37,38],[22,23,23,24]]

我需要创建一个图表,其中每个子列表都是同一图中的趋势线。例如,采用 (x,y) 格式:趋势线 1 具有点 (1,35)、(2,36)、(3,37)。趋势线 2 有点 (1,34),(2,35)...(5,38) 和第三条趋势线相同,我不知道如何做到这一点。我是python初学者,非常感谢您的建议!

编辑我试过:

import matplotlib.pyplot as plt
for list in nested:
      x=range(1, len(list)+1)
      y=list
      plt.plot(x,y)
      plt.show()

这有效,但给出了许多情节。我需要把它全部放在一个情节中

4

2 回答 2

0

您需要plt.show()在循环外调用,否则它将在每次迭代时显示一个图。

import matplotlib.pyplot as plt
nested=[[35,36,37],[34,35,36,37,38],[22,23,23,24]]
for y in nested:
      x=range(1, len(y)+1)
      plt.plot(x,y)
plt.show()

(另外,不要list在python中用作变量名,因为它是一种数据类型。虽然在这里这不会造成伤害,但在其他情况下可能会产生完全的混乱。)

于 2017-02-03T08:14:59.823 回答
0

您可以尝试通过遍历每个子列表并使用enumerate如下方式添加 x 值:

import matplotlib.pyplot as plt

nested = [[35,36,37],[34,35,36,37,38],[22,23,23,24]]
fully_nested = [list(zip(*[(ix+1,y) for ix,y in enumerate(x)])) for x in nested]
names = ['sublist%d'%(i+1) for i in range(len(fully_nested))]

for l in fully_nested:
    plt.plot(*l)
plt.xlim(0,5)
plt.xlabel("Indices")
plt.ylim(0,40)
plt.xlabel("Values")
plt.legend(names, fontsize=7, loc = 'upper left')
plt.show()

这产生:

在此处输入图像描述

我希望这被证明是有用的。

于 2017-02-03T01:43:56.070 回答