Plotting Multiple Shaded Uncertainties
8 ビュー (過去 30 日間)
古いコメントを表示
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)')
0 件のコメント
採用された回答
Star Strider
2023 年 12 月 8 日
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 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
