Python 打印不同大小的列表

Python 打印不同大小的列表,python,matplotlib,Python,Matplotlib,我试着画出四个不同函数的图。其中三个大小相同,但我无法在同一个图上绘制第四个,因为它的大小较小。我相信有办法做到这一点。时间值为0到10小时。前三个函数每小时有一个值(1,2,…,10)。但最后一个函数值仅为每两小时一次(2,4,6,8,10) 以下是我试图在我的数据上应用的内容: plt.plot(time, ut_values, label='u(t)') plt.plot(time, gt_values, label='g(t)') plt.plot(time, ht_values, la

我试着画出四个不同函数的图。其中三个大小相同,但我无法在同一个图上绘制第四个,因为它的大小较小。我相信有办法做到这一点。时间值为0到10小时。前三个函数每小时有一个值(1,2,…,10)。但最后一个函数值仅为每两小时一次(2,4,6,8,10)

以下是我试图在我的数据上应用的内容:

plt.plot(time, ut_values, label='u(t)')
plt.plot(time, gt_values, label='g(t)')
plt.plot(time, ht_values, label='h(t)')
plt.plot(time, Un_values, label='Un')  
plt.title('Response functions of a linear reservoir')
plt.xlabel('Time (h)')
plt.ylabel('Output rate')
plt.grid(which='both',linestyle='--')
plt.legend(loc='upper left')
plt.show()
我只能在没有第四个函数(Un)的情况下生成绘图,这是我添加最后一个函数时出现的错误:

ValueError: x and y must have same first dimension, but have shapes (11,) and (6,)

因此,出现此错误是因为matplotlib不知道如何将数据点映射到二维空间。它需要1:1的映射-对于每个x值,都有一个y值。每一个输入都有一个输出

    x       y
    1   →   0 
    2   →   2
    3   →   4

这种1:1映射是matplotlib在二维空间中绘制(x,y)点时所期望的。那么这和我们的错误有什么关系呢

出现我们的错误是因为matplotlib得到的是:

    x           y
    1   →       0 
    2   →       2
    3   →   ¯\_(ツ)_/¯

我们的额外x值映射到什么?您的计算机不知道,因此出现错误


通常,如果您知道您的数据集完全描述了系统,那么问题在于插值。有关一些快速选项,请参见SciPy的库。或者,我们可能只需要提供这些额外的值来映射。

为了让matplotlib知道每个
Un_值
对应的时间戳,它们都需要具有相同的长度

例如,如果所有的
Un_值都属于最后的时间戳:

plt.plot(时间[len(时间)-len(Un_值):],Un_值,标签='Un')
其中
[len(time)-len(Un_值):]
表示跳过第一个时间戳并一直运行到最后的时间片

如果所有
Un_值都属于第一个时间戳:

plt.plot(时间[0:len(Un_值)-len(时间)],Un_值,标签='Un')
其中
len(Un_值)-len(time)
应该是一个负数,告诉您在结束时要忽略多少时间戳

评论后更新:

当所有
Un_值都属于每秒时间戳时,从列表中的第一个开始:

plt.plot(时间[::2],Un_值,标签='Un')

如果您想从列表中的第二个开始,请使用
time[1::2]

您使用的是
matplotlib
?很明显,您的
time
array/list有11个项目长,而
Un\u值
array/list只有6个。真正的问题是“时间是如何生成的,如果长度不同,您如何知道
Un_值
中的哪些值对应于正确的时间?”如果您对此进行分类,似乎解决方案应该是明确的。时间固定在0到10小时之间。前三个函数每小时有一个值(1,2,…,10)。但是Un_值仅为每两小时一次(2,4,6,8,10)。您可以创建两个变量。使用
time=[0,1,2,3,4,5,6,7,8,9,10]
前三个图和
time2=[0,2,4,6,8,10]
第四个图。我用这个新信息更新了我的答案没有额外的x值,所有的函数都有相同的x值,只是看到了新的注释——重要的是要认识到mpl在位置上将点映射在一起;也就是说,x和y的两个列表被绘制为(x[0],y[0]),(x[1],y[1]),等等。因此,如果您的情况是希望映射x[0],x[2]。。。x[10]到y[0]的列表,y[1]。。。y[5],我们需要对x进行切片,以便列表反映mpl所期望的映射协议,通过类似于x=x[::2]的方式。确切地说,我对x值进行切片,并分配Un值,结果成功了。谢谢