Struct 从结构创建直方图

Struct 从结构创建直方图,struct,histogram,octave,Struct,Histogram,Octave,我在Octave v5.1.0中有一个结构,如下所示: >> cal_data cal_data = scalar structure containing the fields: OG_0100 = 0.045260 -62.422000 0.044310 -60.768600 0.045000 -61.576600 0.044620 -61.303400 OG_0101 = 0.04

我在Octave v5.1.0中有一个结构,如下所示:

>> cal_data
cal_data =

  scalar structure containing the fields:

    OG_0100 =

        0.045260  -62.422000    0.044310  -60.768600
        0.045000  -61.576600    0.044620  -61.303400

    OG_0101 =

        0.044950  -61.316900    0.044110  -59.609500
        0.045150  -62.235500    0.044380  -61.260800

    OG_0102 =

        0.045160  -61.609900    0.044550  -61.759800
        0.044950  -61.725800    0.044480  -61.062300
等等。。。以递增方式命名为OG_0280的字段。每个字段都是相同的,由2x4双精度数组组成

我想为struct中所有字段中的8个值中的每一个创建一个柱状图,我被卡住了

我尝试了以下方法,但没有成功:

>> hist([cal_data])

error: hist: Y must be real-valued
error: called from
    hist at line 90 column 5

由于每个struct元素的大小相同,因此将它们存储为单个三维阵列将更高效、更灵活。此代码将当前结构转换为以下数组:

cal_data.OG_0100=[ 0.045260 -62.422000 0.044310 -60.768600 0.045000 -61.576600 0.044620 -61.303400]; cal_data.OG_0101=[ 0.044950 -61.316900 0.044110 -59.609500 0.045150 -62.235500 0.044380 -61.260800]; cal_data.OG_0102=[ 0.045160 -61.609900 0.044550 -61.759800 0.044950 -61.725800 0.044480 -61.062300]; data=struct2cellcal\u数据; 数据=重塑数据,1,1,[]; 数据=cell2matdata; 数据:,:,1与cal_data.OG_0100相同。等等

然后,您可以通过首先重塑为二维矩阵来为每个值生成直方图,其中每列都是一个值,每行都是一个观察值,这需要转置。但是,由于每个值的范围非常不同,单个直方图可能并不理想。最好只画8个单独的直方图

数据=重塑数据,[],尺寸数据,3'; 历史数据
谢谢,成功了。我知道这些值有不同的范围,我要做两个直方图,一个用于第1列和第3列,另一个用于第2列和第4列。它们代表相同的数量。