Python 如何使用matplotlib打印一对多打印

Python 如何使用matplotlib打印一对多打印,python,matplotlib,Python,Matplotlib,更新:删除屏幕截图,下面是屏幕截图中的代码: import numpy as np import matplotlib.pyplot as plt x = np.arange(5) y = np.array([[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5],[1,2,5,7,9]]) plt.plot(x,y) #gives ValueError: setting an array element with a sequence. #A relaistic exam

更新:删除屏幕截图,下面是屏幕截图中的代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(5)
y = np.array([[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5],[1,2,5,7,9]])

plt.plot(x,y) #gives ValueError: setting an array element with a sequence.

#A relaistic example
age = [20,30,40,50,60]
salary = np.array([[200,350,414],[300,500,612,700],[500,819],[900,1012],[812,712]])

plt.plot(age,salary) #gives ValueError: setting an array element with a sequence.

我有两个数组,每个数组的大小都是5,y的元素是数组,我希望它们对应于每个x进行绘制,例如,在x=0时,我希望绘制y[0]的所有点,有办法吗


更新:添加了上面的另一个示例以展示一个现实案例,其中我需要绘制不同年龄段的人的不同工资,每个年龄段的人可以有多个工资。

到目前为止,我正在使用以下解决方法,但正在寻找一个更简单的解决方案:

indx = -1
for a in age:
    indx+=1
    for s in salary[indx]:
        plt.plot(a,s,'o')
plt.show()
救命啊

import numpy as np
import matplotlib.pyplot as plt

age = [20,30,40,50,60]
salary = np.array([[200,350,414],[300,500,612,700],[500,819],[900,1012],[812,712]])

#creating x-y tuples
xy = [(k, j) for i, k in enumerate(age) for j in salary[i]]

#unpacking the tuples with zip
plt.scatter(*zip(*xy))

plt.show()
样本输出:


但是,不应该创建不规则的numpy数组,本例可以很好地处理普通列表。只是说说而已。

你想让这个看起来像什么?“我想要绘图”是相当模糊的。在X=0时,我想要两个点,一个在y=1,另一个在y=2,同样在X=1时,我想要三个点在y=1,y=2,y=3,依此类推。在一些地方,我看到了这样的图表,例如,绘制了不同年龄人群的所有工资,然后会有一条线显示每个点的平均值。@BigBen,删除了屏幕截图,用代码更新了这种方法有什么问题?我的意思是,你应该指定颜色,但除此之外?在这种方法中,我调用plot方法的次数与要绘制的点的数量一样多,因此需要更多的时间,我用200个数据集进行测试,在x轴上,我的数据集需要5秒以上,而你的则需要几毫秒,感谢我用随机数据填充了年龄和薪水,您的代码的性能比我调用plot()方法时的性能好5倍多,而我调用plot()方法时的性能是我调用plot()方法时的性能的5倍多
age=np.arange(200)salary=[]对于一个年龄段的用户:sz=np.random.randint(20)arr=[]对于一个年龄段的用户:sz=np.arange(sz):data=np.random.randint(20000)arr.append(data)salary.append(arr)
您可以将列表理解视为for循环的优化版本。我链接到一些关于列表理解的解释;您应该熟悉这个伟大的Python工具。