How to plot multiple time series cell arrays as a shadowed area

3 ビュー (過去 30 日間)
David Franco
David Franco 2023 年 9 月 19 日
コメント済み: Star Strider 2023 年 9 月 20 日
Hi guys!
I have the following cell data (each column represents a different algorithm for comparison; each row represents a experiment run):
* The data is attached.
Using this code:
figure
hold on
cellfun(@plot,mutation1)
I get this plot:
Question 1: How can I represent each column of data in a specific color in the plot using the code above?
Three columns have constant data (single lines: purple, blue and green). Two columns have data with small variations (the other two multicolored lines on the graph).
Question 2: Would it be possible to represent these two multicolored lines (which are made up of a series of other lines) as a shaded area with a middle line?
Thank you very much!

採用された回答

Star Strider
Star Strider 2023 年 9 月 19 日
編集済み: Star Strider 2023 年 9 月 19 日
Answer 1: See the colororder call.
Answer 2: Yes, although it takes a bit of exploring to determine what those curves are. I left in my ‘exploration’ steps (commented-out). After that, this is straightforward.
Try this —
LD = load('mutation1.mat');
mutation1 = LD.mutation1
mutation1 = 20×5 cell array
{300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double} {300×1 double}
colororder(turbo(numel(mutation1))) % Use The 'turbo' 'colormap' To Define The Colours
mutationmtx = cell2mat(reshape(mutation1, 1,[]));
% figure
% surf(mutationmtx, 'EdgeColor','none')
% colormap(turbo)
% xlabel('Columns')
% ylabel('Rows')
%
% figure
% plot((1:size(mutationmtx,2)), mutationmtx(1,:))
% hold on
% plot((1:size(mutationmtx,2)), mutationmtx(150,:))
% hold off
% grid
% legend('1','150', 'Location','best')
Lv1 = mutationmtx(1,:) > 0.3;
Lv2 = mutationmtx(150,:) > 0.05;
highest = max(mutationmtx(:,Lv1 & ~Lv2),[],2);
lowest = min(mutationmtx(:,Lv1 & Lv2), [],2);
middleline = median([highest lowest],2);
% figure
% plot(highest, 'g')
% hold on
% plot(lowest, 'r')
% hold off
v = (1:numel(highest)).';
figure
hold on
cellfun(@plot,mutation1)
patch([v; flip(v)], [highest; flip(lowest)], [1 1 1]*0.75, 'FaceAlpha',0.5)
plot(middleline, '-g', 'LineWidth',1.5)
% Ax = gca;
% Ax.XScale = 'log';
See the documentation on patch for those details.
EDIT — (19 Sep 2023 at 13:52)
Forgot about ‘middle line’, Now added.
.
  4 件のコメント
David Franco
David Franco 2023 年 9 月 20 日
Thank you again @Star Strider! I found a workaround:
Since the first three columns of the cell have the same values (they are deterministic), it is not necessary to plot all of them, so I took the average (I could also take just one sample from each of the three columns)...
For columns 4 and 5 (they are stochastic) I took the maximum and minimum values (because these are variables).
So I didn't need to use the cellfun function and I was able to define the colors and create the correct caption.
load mutation1.mat
n = size(mutation1,1);
mutationmtx = cell2mat(reshape(mutation1,1,[]));
ga1 = mean(mutationmtx(:,1:n),2);
ga2 = mean(mutationmtx(:,n+1:2*n),2);
ga3 = mean(mutationmtx(:,2*n+1:3*n),2);
min_ga4 = min(mutationmtx(:,3*n+1:4*n),[],2);
max_ga4 = max(mutationmtx(:,3*n+1:4*n),[],2);
min_ga5 = min(mutationmtx(:,4*n+1:5*n),[],2);
max_ga5 = max(mutationmtx(:,4*n+1:5*n),[],2);
v = (1:numel(min_ga4)).';
figure
hold on
plot(v,ga1,'Color',[0.0000,0.4470,0.7410]')
plot(v,ga2,'Color',[0.9290,0.6940,0.1250]')
plot(v,ga3,'Color',[0.4940,0.1840,0.5560]')
patch([v; flip(v)], [max_ga4; flip(min_ga4)], 'g', 'FaceAlpha',0.5)
patch([v; flip(v)], [max_ga5; flip(min_ga5)], 'r', 'FaceAlpha',0.5)
legend('GA1','GA2','GA3','GA4','GA5')
The result:
I'm sorry if I hadn't explained it clearly from the beginning. As English is not my native language, it is sometimes difficult to correctly express my ideas. =)
Star Strider
Star Strider 2023 年 9 月 20 日
As always, my pleasure!
No worries — some concepts are difficult to put into words regardless of the language, especially some mathematical concepts. I am happy that I could help you get this sorted.
.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by