如何根据列表绘制列表列表?
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()
我得到 ValueError
个 4, 3
。我知道 x
和 y
必须相等。我认为 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
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()
我得到 ValueError
个 4, 3
。我知道 x
和 y
必须相等。我认为 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