每个X值具有大量(但变化数量)Y值的图表

时间:2015-07-28 14:42:51

标签: python pandas matplotlib

我不太确定如何描述我的问题,所以我在搜索解决方案时遇到了麻烦。如果答案已在别处描述,请原谅我。

我有一个比较两件事并返回值的元组和值列表的函数,其中第一个值始终是列表的一部分,例如:(a, [m,n,a,o])。我有一个我要比较的事项列表[thing1, thing2, thing3, thing4]。我有一个循环这些东西的函数并对它们进行比较,但是我无法弄清楚如何绘制它们:

def compare_thing1(things=[thing2,thing3,thing4]):
    for thing in things:
        *compare thing1 to thing, add to dataframe*

    plot

因此,如果thing1thing2比较返回(10, [8,9,10,11,12])thing3比较将返回(25, [24,25,26,27])thing4比较将返回(30, [28,29,30,31,32,33...]) ,我想要一个如下图:

enter image description here

换句话说,X位置由第一个值确定,然后列表中的值绘制在y轴上。

我想我可以通过在每次比较中创建一堆(x,y)坐标来解决这个问题,但我想知道是否有更好的方法可以使用Series对象或其他东西。问题是所有列表都有不同的长度。

哦,也不确定性能是否是一个问题,每个比较可以长达数千个值。

3 个答案:

答案 0 :(得分:2)

itertools重复在这里可能会有所帮助,例如:

repeat(thing1[0], len(thing1[1]))

这将产生第一个值的列表,其中包含其余值的长度。然后你可以简单地绘制一个与另一个。

编辑:为了完整性,请按照以下方式进行绘制。假设things是包含按照您所描述的结构对象的列表,例如东西= [thing1,thing2,thing3]

for thing in things:

    xthing = repeat(thing[0], len(thing[1]))
    plt.scatter(xthing, thing[1])

答案 1 :(得分:1)

import matplotlib.pyplot as plt

thing1 = (10, [8,9,10,11,12])
thing2 = (25, [24,25,26,27])
thing3 = (30, [28,29,30,31,32,33])

thing1_y = []
for i in thing1[1]:
    thing1_y.append(i)
thing1_x = []
for i in range(len(thing1_y)):
    thing1_x.append(thing1[0])

这会给你:

In [2]: thing1_x
Out[2]: [10, 10, 10, 10, 10]

In [3]: thing1_y
Out[3]: [8, 9, 10, 11, 12]
  

换句话说,X位置由第一个值确定,并且   然后列表中的值绘制在y轴上。

Now you can use 

plt.scatter(thing1_x,thing1_y)

答案 2 :(得分:1)

你可以分割x和y,我想,当你说:"我想我可以通过创建一堆(x,y)坐标来解决这个问题。 。比较"

x, y = (10, [8,9,10,11,12])
x = x * len(y)

我不希望数千个点成为计算机上的问题,但如果它是x,则可以使用生成器形成。