Python图形辅助

时间:2016-04-08 17:21:53

标签: python python-3.x graph

对任何人,

我们已经获得了一些参数(波长和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.

2 个答案:

答案 0 :(得分:0)

因此,如果我正确地阅读您的示例,看起来x和y只有一个维度。如果您删除其中一个WL = np.append(WL, float(data[0]))语句,我认为您的代码可以正常运行(但由于我无法访问您的文件,因此无法对其进行测试)。

如果删除其中一个WL = np.append(WL, float(data[0])),我至少可以向你保证WL和SI的长度相同(因此很有可能正确绘制)。

答案 1 :(得分:0)

您的问题是您将不同大小(更具体地说,不同长度)的数组传递给matplotlib。在查看代码时,我们发现您正在尝试绘制长度不同的WLSI

如果你仔细观察你的数据排序"你会看到你复制了一行代码:

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)