在图形数量不是绘图数量的因素的图形上绘图

Plotting on figures where the number of figures isn't a factor of the number of plots

我正在寻找一种方法来平均绘制矩阵中的 30 列数据,例如,U 个数字,到目前为止,我有办法以 30 的因数来执行此操作,但是我现在正在努力让代码为 U = 7 工作。

代码需要在指定数量的数字 U 上尽可能均匀地绘制数据列,每一列数据代表一个不同的传感器,因此每个都是不同的图。

我到目前为止(感谢 Benoit_11)是:

ColPerFig = size(Data,2)/NumFigures; %// Number of columns to plot per figure

ColStart = 1:ColPerFig:size(Data,2) %// Indices of the starting columns to plot

%// Plot
for k = 1:NumFigures;    
hFig(k) = figure;        
plot(Data(:,ColStart(k):ColStart(k)+ColPerFig-1));
end

其中"data"是4000x30的矩阵,"NumFigures"是数字U的个数

如果有人有任何修改此代码的想法,以便它也适用于非 30 的因数,我将不胜感激。

谢谢

GibGib

如果您的列数不是数字的精确倍数,您必须决定如何处理剩余的列。

这个提议的解决方案首先定义了每个图中可以绘制的列数。然后计算遗漏了多少列,然后将这些剩余的列一一分布在每个图中。

所以在这个 nFigure=7 的例子中,每个图我们可以有 4 列。我们仍然需要绘制 2 个额外的列,因此图 1 和图 2 实际上将绘制 5 列(而图 3 到 7 将只有 4 列)。

您可以轻松更改额外列的绘制位置(在第一个数字和最后一个数字上)

%% // setup test data
Data = randi([9 11],100,30) ;
for ii=1:30
    Data(:,ii) = Data(:,ii)+(10*(ii-1));
end
NumFigures = 7 ;      %// this is the total number of figure

%% // calculate how many columns to plot per figure
nCol = size(Data,2) ;
nColPerFig = fix( nCol/NumFigures ) ;   %// Number of columns to plot per figure
nColRemain = mod(nCol,nColPerFig)  ;   %// Number of columns remaining to distribute on existing figures

ncol2plot = ones( NumFigures , 1 ) * nColPerFig ;       %// define how many columns will be plotted in each figure
ncol2plot(1:nColRemain) = ncol2plot(1:nColRemain)+1 ;   %// add a column per figure as many time as necessary to make sure we plot ALL columns

ColStart = cumsum([1;ncol2plot]) ;      %// Indices of the starting columns to plot
ColStart = ColStart(1:NumFigures) ;     %// truncate the vector in case it went too far

%% // Plot
for k = 1:NumFigures    
    hFig(k) = figure ;        
    plot( Data(:,ColStart(k):ColStart(k)+ncol2plot(k)-1) ) ;
    legend('show') %// this is just for a quick visualisation of how many columns we have in each figure
end