在 table 的 for 循环中将条形图绘制为子图,以便在每次迭代时更新 w.r.t 行元素

Plot a bar chart as subplot in a for loop from a table so that it updates at each iteration w.r.t row elements

我在主题的 for 循环中有几个子图。我想从 20x2 table 绘制主题明智的表现。我如何制作一个单独的子图 - 同一个图形上的条形图,在第一次迭代时它更新并将第一行的元素分别绘制为 Space 和时间,然后在第二行的第二次迭代中,等等上,从性能上来说table?下面给出了我的代码的摘录。

在此先感谢您的帮助!

最好的, A

for s=1:size(SubjectFolder,2)
                    % ..... some code
figure(1)
 subplot(423)
                        f_psd = Grand_AvgTF_Space.freq;
                        [trash,f_psd_plot] = min(abs(f_psd-which_f)); 
                        PSD = mean(abs(squeeze(Grand_AvgTF_Space.powspctrm(s,:,:,:))),3); % [ch x freq] PSD of space or time condition          
                        semilogy(f_psd,PSD,'color','b')
                        hold on, 
                        semilogy(f_psd, mean(PSD),'linewidth',3,'color','r')
                        hold on
                        line([which_f which_f],[min(PSD(:)) max(PSD(:))],'color','g','linewidth',3)
                        xlabel('Frequency (Hz)')
                        ylabel('Power (dB/Hz)')
                        title( 'Space' )
                        ylim([min(PSD(:)) max(PSD(:))])
                        title( 'Space' )
    subplot(424), % topoplot space
                    data_megin.avg = repmat(PSD(:,f_psd_plot),1,length(data_megin.time));
                    cfg.parameter        = 'avg' %
                    ft_topoplotER(cfg, data_megin );
                    title(['Topolot for Space Freq = ' num2str(f_psd(f_psd_plot)) ' Hz'])
                    
                    %..... some code
            end 
        
            % 20x2 Table looks like this without variable names. Suppose I wanna give 1st col name as Space and 2nd col as Time in the required subplot, where each row represents subject1 to subject20.
            96   100
            85   89
            .     .
            .     .
            80    87

bar()plot() 调用中指示坐标轴

这可能不完全适合您的确切用例,但如果您只是想在条形图中添加一个条形图,该条形图是每次迭代的子图的一部分,此示例可能会有所帮助。这里 subplot(4,2,3) 轴被分配给变量 Bar_Graph_AxesBar_Graph_Axes 可以在 bar() 调用中调用,以指示要绘制的特定轴。传递轴名称是修改现有绘图的好方法,因为调用 hold on 将自动允许您修改最后调用的绘图。下面是一个 playground 脚本,您可以修改它以适合您的实现。 pause(1) 用于可视化目的,以显示添加的每个栏。

游乐场脚本:

Number_Of_Graphs = 20;

Table = rand(20,2);
Table(:,1) = (1:20);

for Graph_Index = 1: Number_Of_Graphs
    
Bar_Graph_Axes = subplot(4,2,3); 
hold on
bar(Bar_Graph_Axes,Table(Graph_Index,1),Table(Graph_Index,2));
title("Bar Graph Subplot");
pause(1);

end

如果数组中的数据已经格式化

如果数据只是在一个数组中,其中类别由调用函数的列定义bar(),在这种情况下将自动生成双条形图。

Number_Of_Iterations = 20;
Performance_Space_Time = rand(Number_Of_Iterations,2);
bar(Performance_Space_Time);
xticks(1:Number_Of_Iterations);
title("Bar Graph");
xlabel("Iteration, s"); ylabel("Value");
legend("Space","Time");

运行 使用 MATLAB R2019b

这方面的一些东西可能会奏效,不幸的是,没有我求助于使用占位符图的数据。条形图的大小和颜色很可能也可以更改。在这里,我假设地形地块可以毫无问题地占用一个子地块槽。我对地形图的绘制 characteristics/behaviour 不够熟悉,无法判断这是否会按预期工作。

对于较小的条形图,将此行从:

subplot(4,3,[3 6 9 12]); Bar_Graph = bar(Bar_Data);

至:

subplot(4,3,[6 9]); Bar_Graph = bar(Bar_Data);

Table = round(100*rand(20,2));
Placeholder = zeros(500,1000);

for Figure_Index = 1: 20

figure(Figure_Index);
subplot(4,3,1); imshow(Placeholder); title("Plot 1");
subplot(4,3,2); imshow(Placeholder); title("Topoplot 1");
subplot(4,3,4); imshow(Placeholder); title("Plot 2");
subplot(4,3,5); imshow(Placeholder); title("Topoplot 2");
subplot(4,3,7); imshow(Placeholder); title("Plot 3");
subplot(4,3,8); imshow(Placeholder); title("Topoplot 3");
subplot(4,3,10); imshow(Placeholder); title("Plot 4");
subplot(4,3,11); imshow(Placeholder); title("Topoplot 4");

Bar_Data = Table(Figure_Index,:);
subplot(4,3,[3 6 9 12]); Bar_Graph = bar(Bar_Data);
text(1:length(Bar_Data),Bar_Data,num2str(Bar_Data'),'vert','bottom','horiz','center'); 
Bar_Graph.BaseLine.Visible = 'off';
axis off

end

运行 使用 MATLAB R2019b