根据列表索引绘制列表值

kk9*_*6kk 1 python matplotlib

我有一个列表列表,其中每个列表包含一些数字,比方说

t = [[5,6,1],[4,6,33],[6,33,5,10],[1,2],[1,22,44,3]]
Run Code Online (Sandbox Code Playgroud)

使用python3我想根据这个特定的列表索引绘制每个列表值,在上面的例子中我应该有x轴从1到3,y轴从1到50,标记在(1,5),(1) ,6),(1,1),(2,4),(2,6)......

这是我的代码

x = list(range(3))
y = [[5,6,1],[4,6,33],[6,33,5,10],[1,2],[1,22,44,3]]


for i in range(len(x)):
    purchases = y[i]
    for j in range(len(purchases)):
        plt.scatter(x,purchases)
Run Code Online (Sandbox Code Playgroud)

它正确绘制前两个索引然后我得到错误:

x和y必须大小相同

输出图像

这样做的正确方法是什么?

raf*_*elc 5

我想你需要

y = [[5,6,1],[4,6,33],[6,33,5,10],[1,2],[1,22,44,3]]


for v in y:
    plt.scatter(range(len(v)),v)
Run Code Online (Sandbox Code Playgroud)

这基本上是计算range每个值的值,因为你的y列表里面有不同大小的列表

在此输入图像描述


如果你想为每个索引设置相同的xy,那么就做

for i,v in enumerate(y):
    plt.scatter([i+1]*(len(v)),v)
Run Code Online (Sandbox Code Playgroud)

请注意,我已经完成了,[i+1]因为你写它的方式,似乎你想要一个从1开始的索引

在此输入图像描述