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

2 views (last 30 days)
Ingo Hermann
Ingo Hermann on 1 Nov 2017
Edited: 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
Adam
Adam on 1 Nov 2017
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.

Answers (4)

M
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 .

Ingo Hermann
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...

Steven Lord
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.

Adam
Adam on 1 Nov 2017
Edited: 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!

Categories

Find more on 2-D and 3-D Plots in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!