Need help with this code..
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello everyone,
I am writing this function for plotting histograms. I need help with making this code very generic. That is it should work for any set of data. the code is as follows:
function us(x,bins,units,name)
[p q]=hist(x,bins);
barh(q,p)
xlabel(units)
ylabel(name)
yy_tick=[min(q) mean(q) median(q) max(q)];
yy_label={num2str(min(x)),strcat('mean = ',num2str(mean(x))) , strcat('median = ',num2str(median(x))),num2str(max(x))};
Ynew=sort(yy_tick);
for i=1:length(Ynew)
j=find(Ynew(1,i)==yy_tick);
y_label(1,i)=yy_label(1,j(1,1));
end
set(gca,'YTick',Ynew)
set(gca,'YTickLabel',y_label)
I need to understand how can I use a nargin function in this code so that if say nargin= 2 and if input is a scalar then it probably is (x,bins) and if it a text the tht would be units or name. Does this make sense? Please help me understand. I am very very new to matlab. Thanks much in advance.
0 Kommentare
Antworten (1)
Star Strider
am 15 Okt. 2012
You are correct with respect to using nargin. For example:
if nargin < 2
fprintf(2,'\n\nError in function ''us'': Not enough input arguments.\n\n')
return
end
You can also check to be sure the arguments are the correct class. For example:
if ~isnumeric(x)
fprintf(2,'\n\nError in function ''us'': Argument ''x'' must be numeric.\n\n')
return
end
if ~ischar(units)
fprintf(2,'\n\nError in function ''us'': Argument ''units'' must be a string.\n\n')
end
and so on for the others if you want to check them.
2 Kommentare
Star Strider
am 15 Okt. 2012
If nargin = 2, the first two arguments will be the arguments nargin checks for. They will appear in your us function as x and bins respectively. If you want to be sure they are numeric, use the
if ~isnumeric(x)
...
end
and copy and adapt it to:
if ~isnumeric(bins)
...
end
If nargin == 2, that means the units and name arguments are not provided to your us function, and you need to set them to be empty strings. In that situation, the first lines in your function then need to be:
if nargin == 2
units = '';
name = '';
end
You can also test for units and name individually:
if nargin == 3 % Test for 'units'
name = ''; % Argument 'units' exists but not 'name'
end
That should test for everything, and your function should work with varying numbers of arguments. Be sure these all appear before any other statements in your function.
Siehe auch
Kategorien
Mehr zu Data Distribution Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!