如何根据列表绘制列表列表?

How to plot list of lists against list?

x = [2000,2001,2002,2003]
y = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
for i in range(len(y[0])):
    plt.plot(x,[pt[i] for pt in y])
plt.show()

我得到 ValueError4, 3。我知道 xy 必须相等。我认为 len(y[0]) 会起作用。

对于 y 中的每个子列表,我想生成一行,其 x 值对应于 2000, 2001, 2002, 2003

[pt[i] for pt in y] i = 0 会给你 [1,5,9].

我认为你需要 [1,2,3,4],所以使用 y[i] 而不是 [pt[i] for pt in y]

对于简单的 Pythonic 解决方案,请执行以下操作:

for y_values in y:
    plt.plot(x, y_values)

plt.xticks(x)  # add this or the plot api will add extra ticks
plt.show()

您的 y 嵌套列表中的每个项目都是您要针对 x 绘制的列表,因此这种方法在这里非常有效。

另一种解决方案是按以下方式使用 pandas 包:

import pandas as pd
import matplotlib.pyplot as plt
x = [2000,2001,2002,2003]
y = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
df = pd.DataFrame(y).transpose()
df.index=x
df.plot()
plt.show()

结果将是:

输出 DataFrame 为:

In [30]: df
Out[30]: 
      0  1   2
2000  1  5   9
2001  2  6  10
2002  3  7  11
2003  4  8  12