对任何人,
我们已经获得了一些参数(波长和4个斯托克斯参数)的数据集,我认为我已经正确地设置了一切。然而,这似乎是因为在尝试获取图表时我有错误
ValueError: x and y must have same first dimension
我不完全理解第一维的含义,但我确实认为我已经错误地参数化了。一些前言是我给出了一组文件,这些文件包含有关波长和斯托克斯参数的数据(其中有四个:I Q U V),并形成将每个斯托克参数与波长相关联的图形。
代码方式这就是我们正在考虑的问题
碱
import matplotlib.pyplot as plt
import numpy as np
import scipy.constants as c
from scipy.interpolate import spline
import re
split_on_spaces = re.compile(" +").split
阵列列表
WL = np.array([])
SI = np.array([])
SQ = np.array([])
SU = np.array([])
SV = np.array([])
数据排序
with open('C:\\Users\\Schmidt\\Desktop\\Python\\Homework_4\\CoolStuffLivesHere\\stokes_profiles_0.txt') as f:
for line in f:
data=split_on_spaces(line.strip())
if len(data) == 0:
continue
if len(data) != 5:
sys.stderr.write("BAD LINE: {}".format(repr(line)))
continue
WL = np.append(WL, float(data[0]))
SI = np.append(SI, data[1])
SQ = np.append(SQ, data[2])
SU = np.append(SU, data[3])
SV = np.append(SV, data[4])
密谋
plt.plot(WL,SI)
plt.show()
再次出现错误ValueError: x and y must have same first dimension
。我需要将哪些内容插入到我的文件中才能更正此问题。添加奖励但不是必需的,如何在执行时将4个图形放到一个显示器上? For example, something like this.
答案 0 :(得分:0)
因此,如果我正确地阅读您的示例,看起来x和y只有一个维度。如果您删除其中一个WL = np.append(WL, float(data[0]))
语句,我认为您的代码可以正常运行(但由于我无法访问您的文件,因此无法对其进行测试)。
如果删除其中一个WL = np.append(WL, float(data[0]))
,我至少可以向你保证WL和SI的长度相同(因此很有可能正确绘制)。
答案 1 :(得分:0)
您的问题是您将不同大小(更具体地说,不同长度)的数组传递给matplotlib。在查看代码时,我们发现您正在尝试绘制长度不同的WL
和SI
。
如果你仔细观察你的数据排序"你会看到你复制了一行代码:
WL = np.append(WL, float(data[0]))
WL = np.append(WL, float(data[0]))
SI = np.append(SI, data[1])
由于您使用的是单例追加方法,data[0]
中的内容会在每次循环迭代时附加到WL
两次,但data[1]
仅附加到SI
单次。这意味着WL
最终将成为SI
长度的两倍,从而导致尺寸不匹配。
图中的多个图可以使用matplotlib subplots()
方法完成,如here所述。一个简单的例子可能如下所示:
f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(x, y)
axarr[1].plot(x, z)