如何制作具有不同长度的 x 和 y 的图形
How to make a graph with x and y of different length
我正在尝试制作一个 Python 应用程序,在用户输入数据后显示图表,但问题是 y_array
和 x_array
没有相同的维度。当我 运行 程序时,出现此错误:
ValueError: x and y must have same first dimension, but have shapes () and ()
如何绘制 X 轴和 Y 轴不同长度的图形?
这是一个最小的示例代码,它会导致我遇到的相同错误
:
import matplotlib.pyplot as plt
y = [0, 8, 9, 3, 0]
x = [1, 2, 3, 4, 5, 6, 7]
plt.plot(x, y)
plt.show()
这实际上是 copy/paste 找到的答案 ,但我将展示我为使这些匹配所做的工作。
首先,我们需要决定使用哪个数组 - 长度为 7 的 x_array
或长度为 5 的 y_array
。我将展示两者,从前者开始。请注意,我使用的是 numpy
数组,而不是列表。
让我们加载模块
import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as interp
和数组
y = np.array([0, 8, 9, 3, 0])
x = np.array([1, 2, 3, 4, 5, 6, 7])
在这两种情况下,我们都使用 interp.interp1d
,在 documentation 中有详细描述。
对于x_array
要缩减为y_array
的长度:
x_inter = interp.interp1d(np.arange(x.size), x)
x_ = x_inter(np.linspace(0,x.size-1,y.size))
print(len(x_), len(y))
# Prints 5,5
plt.plot(x_,y)
plt.show()
这给出了
并将 y_array
增加到 x_array
的长度:
y_inter = interp.interp1d(np.arange(y.size), y)
y_ = y_inter(np.linspace(0,y.size-1,x.size))
print(len(x), len(y_))
# Prints 7,7
plt.plot(x,y_)
plt.show()
这给出了
我正在尝试制作一个 Python 应用程序,在用户输入数据后显示图表,但问题是 y_array
和 x_array
没有相同的维度。当我 运行 程序时,出现此错误:
ValueError: x and y must have same first dimension, but have shapes () and ()
如何绘制 X 轴和 Y 轴不同长度的图形?
这是一个最小的示例代码,它会导致我遇到的相同错误 :
import matplotlib.pyplot as plt
y = [0, 8, 9, 3, 0]
x = [1, 2, 3, 4, 5, 6, 7]
plt.plot(x, y)
plt.show()
这实际上是 copy/paste 找到的答案
首先,我们需要决定使用哪个数组 - 长度为 7 的 x_array
或长度为 5 的 y_array
。我将展示两者,从前者开始。请注意,我使用的是 numpy
数组,而不是列表。
让我们加载模块
import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as interp
和数组
y = np.array([0, 8, 9, 3, 0])
x = np.array([1, 2, 3, 4, 5, 6, 7])
在这两种情况下,我们都使用 interp.interp1d
,在 documentation 中有详细描述。
对于x_array
要缩减为y_array
的长度:
x_inter = interp.interp1d(np.arange(x.size), x)
x_ = x_inter(np.linspace(0,x.size-1,y.size))
print(len(x_), len(y))
# Prints 5,5
plt.plot(x_,y)
plt.show()
这给出了
并将 y_array
增加到 x_array
的长度:
y_inter = interp.interp1d(np.arange(y.size), y)
y_ = y_inter(np.linspace(0,y.size-1,x.size))
print(len(x), len(y_))
# Prints 7,7
plt.plot(x,y_)
plt.show()
这给出了