在matplotlib中绘制具有不同数量元素的列表

Ram*_*uet 3 numpy matplotlib pandas

我有一个numpy数组的列表,每个数组可能都有不同数量的元素,例如:

[array([55]),
 array([54]),
 array([], dtype=float64),
 array([48, 55]),]
Run Code Online (Sandbox Code Playgroud)

我想绘制此图,其中每个数组都分配了一个横坐标(x值),例如,[1,2,3,4]以便该图应显示以下几点:[[1,55], [2, 54], [4, 48], [4, 55]]。有什么办法可以用matplotlib做到这一点吗?或者我该如何首先用numpy或pandas转换数据,以便可以绘制数据?

Ale*_*ani 5

您想要做的是链接原始数组并生成一个带有“横坐标”的新数组。连接的方法很多,最有效的方法之一是使用itertools.chain

import itertools
from numpy import array

x = [array([55]), array([54]), array([]), array([48, 55])]

ys = list(itertools.chain(*x))
# this will be [55, 54, 48, 55]

# generate abscissas
xs = list(itertools.chain(*[[i+1]*len(x1) for i, x1 in enumerate(x)])) 
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用matplotlib轻松绘制,如下所示

import matplotlib.pyplot as plt
plt.plot(xs, ys)
Run Code Online (Sandbox Code Playgroud)

  • 这是可行的,但是要按要求获得xs = [1、2、4、4],则需要对enumerate(x)中的i,x1使用[[i + 1] * len(x1)]。(当前,它给出的是[[0,1,3,3]`) (2认同)