Data Set with multiple markers, how do I get the legend to display this?
조회 수: 4 (최근 30일)
이전 댓글 표시
I have a data set I've been playing with that has low energy observations and high energy observations. I was wanting to display the low energy data with the '*', and the high energy data with the '^'.
Here's the code I've got:
function [fitresult, gof] = createFit1(xdata1, ydata1)
HeliumData_Voyager
%CREATEFIT1(XDATA1,YDATA1)
% Create a fit.
%
% Data for 'untitled fit 1' fit:
% X Input : xdata1
% Y Output: ydata1
% Output:
% fitresult : a fit object representing the fit.
% gof : structure with goodness-of fit info.
%
% See also FIT, CFIT, SFIT.
% Auto-generated by MATLAB on 11-Aug-2015 22:20:58
%%Fit: 'untitled fit 1'.
[xData, yData] = prepareCurveData( xdata1, ydata1 );
% Set up fittype and options.
ft = fittype( '1/(a*(x)^b+c*(x)^d+e*(x)^f)', 'independent', 'x', 'dependent', 'y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Algorithm = 'Levenberg-Marquardt';
opts.Display = 'Off';
opts.Robust = 'Bisquare';
opts.StartPoint = [0.5 0.165607687252584 0.777847540631553 0.913375856139019 0.63235924622541 0.0975404049994095];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h1 = plot(fitresult, xData(1:14), yData(1:14),'*');
hold on
h2 = plot(fitresult, xData(15:27), yData(15:27), '^');
hold off
hold on
h3 = plot(fitresult);
set(gca,'XScale','log')
set(gca,'YScale','log')
axis([.001,100,.00001,20])
legend( h1, 'Voyager Data', 'Line of Best Fit', 'Location', 'SouthWest' );
% Label axes
title('Low and High Energy Cosmic Ray Spectra for Helium')
xlabel('Energy (GeV)')
ylabel('Flux particle m^{-2}s^{-1}sr^{-1}MeV')
grid on
You probably don't need the data set for this question, but for good measure:
xdata1 = [0.0021859258,0.0035637526,0.0049688127,0.007943902,0.012700333,...
0.020705573,0.032462176,0.04615445,0.059510704,0.098936856,0.19612777,...
0.2899725,0.381267,0.5013045,12.45768,12.954449,15.1476755,14.378171,...
17.712223,19.658836,20.982672,22.395653,30.620895,24.856985,27.95077,...
33.1117,35.805107];
ydata1 = [2.17084,1.5341274,1.6444274,2.4091163,2.025231,2.673546,2.7679887,...
2.5823257,2.3269181,1.8893886,1.3352263,0.8803091,0.5803841,0.42464474,...
4.8200923E-4,3.8242337E-4,2.194412E-4,2.9647112E-4,1.8235153E-4,...
1.3813264E-4,1.0463649E-4,8.496173E-5,4.1460968E-5,6.144804E-5,...
4.875252E-5,3.2894895E-5,2.5501544E-5];
And I'll attach the graph, where you can see I've already got the stars and triangles. However, I can't get the legend to show both types of markers. I want the stars to say Voyager Data, and the triangles to say Pamela Data.
I've tried the following:
legend( [h1,h2], 'Voyager Data', 'Pamela Data', 'Line of Best Fit', 'Location', 'SouthWest' );
However, that didn't work. How can I accomplish this?
댓글 수: 0
채택된 답변
Jon
2015년 8월 12일
Why are you including 'fitresult' in your plotting commands? See if this code does what you want:
function [fitresult, gof] = createFit1(xdata1, ydata1)
% HeliumData_Voyager
%CREATEFIT1(XDATA1,YDATA1)
% Create a fit.
%
% Data for 'untitled fit 1' fit:
% X Input : xdata1
% Y Output: ydata1
% Output:
% fitresult : a fit object representing the fit.
% gof : structure with goodness-of fit info.
%
% See also FIT, CFIT, SFIT.
% Auto-generated by MATLAB on 11-Aug-2015 22:20:58
%%Fit: 'untitled fit 1'.
[xData, yData] = prepareCurveData( xdata1, ydata1 );
% Set up fittype and options.
ft = fittype( '1/(a*(x)^b+c*(x)^d+e*(x)^f)', 'independent', 'x', 'dependent', 'y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Algorithm = 'Levenberg-Marquardt';
opts.Display = 'Off';
opts.Robust = 'Bisquare';
opts.StartPoint = [0.5 0.165607687252584 0.777847540631553 0.913375856139019 0.63235924622541 0.0975404049994095];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% Plot fit with data.
figure( 'Name', 'untitled fit 1' )
hold on
plot( xData(1:14), yData(1:14), '*');
plot( xData(15:27), yData(15:27), '^');
plot(fitresult);
set(gca,'XScale','log')
set(gca,'YScale','log')
axis([.001,100,.00001,20])
legend('Voyager Data', 'Pamela Data', 'Line of Best Feet', 'Location', 'SouthWest' );
% Label axes
title('Low and High Energy Cosmic Ray Spectra for Helium')
xlabel('Energy (GeV)')
ylabel('Flux particle m^{-2}s^{-1}sr^{-1}MeV')
grid on
댓글 수: 2
Jon
2015년 8월 12일
It was their inclusion that prevented legend from functioning the way you expected. Basically, extra axes were being plotted in each 'plot' command.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Fit Postprocessing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!