Hi, I am relatively new to coding and having an issue plotting my data. I get files with element concentrations and uncertainties and I'd like to plot many of them on one figure with their corresponding figures shaded. I've gotten this code to work for shading the uncertainty for a single element, but I'm not sure this is accurate and the legend is offset (counting the shading as entries). Ideally I won't need a string of code for each element (I have 11 in my code currently but we measure 140). Thanks for any input!
X = Xactdata.Date(Data); % dates & times from instrument
Elements = [Xactdata.SULPHUR(Data),Xactdata.CHLORINE(Data),Xactdata.POTASSIUM(Data),Xactdata.CALCIUM(Data),Xactdata.TITANIUM(Data),Xactdata.IRON(Data),Xactdata.COPPER(Data),Xactdata.ZINC(Data),Xactdata.ARSENIC(Data),Xactdata.BROMINE(Data),Xactdata.BARIUM(Data)]; %element concentration
E_err = [Xactdata.S_U(Data),Xactdata.Cl_U(Data),Xactdata.K_U(Data),Xactdata.Ca_U(Data),Xactdata.Ti_U(Data),Xactdata.Fe_U(Data),Xactdata.Cu_U(Data),Xactdata.Zn_U(Data),Xactdata.As_U(Data),Xactdata.Br_U(Data),Xactdata.Ba_U(Data)]; %element uncertainty
E_Labels = {"S","Cl","K","Ca","Ti","Fe","Cu","Zn","As","Br","Ba"};
figure
for i = 1:11 %number of elements plotted
plot(X, Elements(:,i))
hold on
patch([x; flip(x)], [Elements(:,i)-E_err(:,i); flip(Elements(:,i)+E_err(:,i))], 'b', 'FaceAlpha',0.25, 'EdgeColor','none')
end
legend(E_Labels)
title('Element Concentrations')
ylabel('Concentration (ng/m^3)')
xlabel('Date (UTC)')

 채택된 답변

Star Strider
Star Strider 2023년 12월 8일

0 개 추천

That appears to be correct, although it would be necessary to provide the data to check for any errors.
You can prevent the patch plots from appearing in the legend by providing only the plot calls to the legend fucntion:
X = Xactdata.Date(Data); % dates & times from instrument
Elements = [Xactdata.SULPHUR(Data),Xactdata.CHLORINE(Data),Xactdata.POTASSIUM(Data),Xactdata.CALCIUM(Data),Xactdata.TITANIUM(Data),Xactdata.IRON(Data),Xactdata.COPPER(Data),Xactdata.ZINC(Data),Xactdata.ARSENIC(Data),Xactdata.BROMINE(Data),Xactdata.BARIUM(Data)]; %element concentration
E_err = [Xactdata.S_U(Data),Xactdata.Cl_U(Data),Xactdata.K_U(Data),Xactdata.Ca_U(Data),Xactdata.Ti_U(Data),Xactdata.Fe_U(Data),Xactdata.Cu_U(Data),Xactdata.Zn_U(Data),Xactdata.As_U(Data),Xactdata.Br_U(Data),Xactdata.Ba_U(Data)]; %element uncertainty
E_Labels = {"S","Cl","K","Ca","Ti","Fe","Cu","Zn","As","Br","Ba"};
figure
for i = 1:11 %number of elements plotted
hp{i} = plot(X, Elements(:,i)) ;
hold on
patch([X; flip(X)], [Elements(:,i)-E_err(:,i); flip(Elements(:,i)+E_err(:,i))], 'b', 'FaceAlpha',0.25, 'EdgeColor','none')
end
legend([hp{:}], E_Labels, 'Location','best)
title('Element Concentrations')
ylabel('Concentration (ng/m^3)')
xlabel('Date (UTC)')
That should work. (I changed the first patch argument from ‘[x; flip(x)]’ to ‘[X; flip(X)]’ since MATLAB is case-sensitive, and the independent variable appears to be ‘X’ rather than ‘x’.)
.

댓글 수: 4

Olivia Hakan
Olivia Hakan 2023년 12월 8일
This is great, thank you! Is there any way to have the uncertainty vary color with the species? Right now its the same for all of them.
Thank you!
There are 11 elements, so one option would be:
X = Xactdata.Date(Data); % dates & times from instrument
Elements = [Xactdata.SULPHUR(Data),Xactdata.CHLORINE(Data),Xactdata.POTASSIUM(Data),Xactdata.CALCIUM(Data),Xactdata.TITANIUM(Data),Xactdata.IRON(Data),Xactdata.COPPER(Data),Xactdata.ZINC(Data),Xactdata.ARSENIC(Data),Xactdata.BROMINE(Data),Xactdata.BARIUM(Data)]; %element concentration
E_err = [Xactdata.S_U(Data),Xactdata.Cl_U(Data),Xactdata.K_U(Data),Xactdata.Ca_U(Data),Xactdata.Ti_U(Data),Xactdata.Fe_U(Data),Xactdata.Cu_U(Data),Xactdata.Zn_U(Data),Xactdata.As_U(Data),Xactdata.Br_U(Data),Xactdata.Ba_U(Data)]; %element uncertainty
E_Labels = {"S","Cl","K","Ca","Ti","Fe","Cu","Zn","As","Br","Ba"};
cm = turbo(numel(E_labels));
figure
for i = 1:11 %number of elements plotted
hp{i} = plot(X, Elements(:,i)) ;
hold on
patch([X; flip(X)], [Elements(:,i)-E_err(:,i); flip(Elements(:,i)+E_err(:,i))], cm(i,:), 'FaceAlpha',0.25, 'EdgeColor','none')
end
legend([hp{:}], E_Labels, 'Location','best)
title('Element Concentrations')
ylabel('Concentration (ng/m^3)')
xlabel('Date (UTC)')
Testing that —
E_Labels = {"S","Cl","K","Ca","Ti","Fe","Cu","Zn","As","Br","Ba"};
cm = turbo(numel(E_Labels));
figure
hold on
for k = 1:numel(E_Labels)
patch([0 1 1 0]+(k-1), [0 0 1 1], cm(k,:))
text(0.5+(k-1), 0.5, E_Labels(k), 'Horiz','center', 'Vert','middle', 'Color','w', 'FontWeight','bold')
end
hold off
Choose whatever colormap you want.
.
Olivia Hakan
Olivia Hakan 2023년 12월 8일
That worked. Thanks again!
Star Strider
Star Strider 2023년 12월 8일
As always, my pleasure!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

질문:

2023년 12월 7일

댓글:

2023년 12월 8일

Community Treasure Hunt

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

Start Hunting!

Translated by