繁体   English   中英

python matplotlib用于带有功能和标签的循环图

[英]python matplotlib for loop plot with function and labels

我试图从带有标签的数组中绘制多个函数。

所以我从这里找到了一些帮助: https : //stackoverflow.com/a/11493343/4055341并尝试修改代码,如下所示。 但是我得到了一个错误。 所以我得到的错误是ValueError,但是如何使它们具有相同的大小?

import numpy as np
import matplotlib.pyplot as plt


x = np.linspace(0, 10, 100)

y = [[5*x], [1*x], [2*x]]

labels = ['foo', 'bar', 'baz']

for y_arr, label in zip(y, labels):
    plt.plot(x, y_arr, label=label)

plt.legend()
plt.show()

y = [[5*x], [1*x], [2*x]]替换为y = [5*x, 1*x, 2*x]应该足以解决您的问题。

推理:

当您执行x = np.linspace(0, 10, 100)x变成类似于x = [0, 0.1010, 0.2020, 0.3030, ..., 9.7979, 9.8989, 10]的Numpy数组。 x乘以标量会生成一个具有相同大小的新Numpy数组,例如5*x = [0, 0.505, 1.01, 1.515, ..., 48.989, 49.494, 50] 因此, y = [5*x, 1*x, 2*x]将是一个列表,每个元素都是一个适当的Numpy数组。

在视觉上,它是这样的:

y = [
    [0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10],
    [0, 0.505, 1.01, 1.515, 48.9895, 49.4945, 50],
    [0, 0.202, 0.404, 0.606, 19.5958, 19.7978, 20]
]

另一方面, y = [[5*x], [1*x], [2*x]]是一个包含3个列表的列表,每个列表仅包含一个对象:乘法所得的Numpy数组。 结果如下:

y = [
    [
        [0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10]
    ],
    [
        [0, 0.505, 1.01, 1.515, 48.9895, 49.4945, 50]
    ],
    [
        [0, 0.202, 0.404, 0.606, 19.5958, 19.7978, 20]
    ]
]

这就是plot中断的原因:原本期望数组的长度为x但例如, y_arr被分配给[[0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10]] :一个只有一个对象的列表(其中碰巧是一个Numpy数组)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM