MATLAB Answers

0

Output of Function in Form of 'Color',[0 0.2 0.4]!

Asked by Ingo Hermann on 1 Nov 2017
Latest activity Edited by Adam
on 1 Nov 2017
Dear Community, I want to write a Function clrs('color') which returns 'Color',[0 0.2 0.4] as an argument so that I can do plot(x,y,clrs('green')); I tried it with str = ' ''Color'',[0 0.2 0.4] '; and with eval but it doesn't work. Do you have any idea how i can do that?
function [out] = clrs(color)
if (strcmp('blue',color) == 1)
value = [0 0.447 0.741];
end
out{1} = 'Color';
out{2} = value;
end
plot([1 2],[1 2],'x',clrs('blue'));

  1 Comment

Off the top of my head I don't think that is possible. To pass two distinct arguments to the plot function they would have to be in e.g a cell array as
args = { 'color', [0 0.2 0.4] };
Then you can pass
plot( ..., args{:} )
but I don't think there is any syntax that allows you to return multiple arguments out of a function and pass them to another. You cannot chain a {:} on the end of a function call either unless I am much mistaken.

Sign in to comment.

4 Answers

Answer by M
on 1 Nov 2017

clrs('blue')
returns
ans =
'Color' [1x3 double]
so you cannot use it directly in the plot command.
First you need to access :
b=clrs('blue')
b =
'Color' [1x3 double]
and then get the value
b{2}
ans =
0 0.4470 0.7410
But you will not be able to use it directly in the plot command, see the plot documentation .

  0 Comments

Sign in to comment.


Answer by Ingo Hermann on 1 Nov 2017

Thank you for your fast response :D Then I have to write all the time 'Color' in front of my function...

  0 Comments

Sign in to comment.


Answer by Steven Lord
on 1 Nov 2017

One alternative would be to write a function named setcolor that accepts a handle of the line you plotted and sets its Color property.
setcolor = @(h, newcolor) set(h, 'Color', newcolor);
h = plot(1:10, 1:10);
pause % so you can see the original color
setcolor(h, 'r')
For simple demonstration purpose I wrote a basic setcolor as an anonymous function. You can create a more powerful and more complicated version as a regular function file.

  0 Comments

Sign in to comment.


Answer by Adam
on 1 Nov 2017
Edited by Adam
on 1 Nov 2017

Well, you can do:
colourArgs = clrs('blue')
plot([1 2],[1 2],'x', colourArgs{:});
if you are willing to accept two lines of code!

  0 Comments

Sign in to comment.