MATLAB Answers

How can I plot an order which is a string variable?

4 views (last 30 days)
Aurea94
Aurea94 on 10 Feb 2017
Edited: Stephen Cobeldick on 10 Feb 2017
Due to my code I have a variable which contains the orders I need to plot: S is a structure of 1x5 struct of 2 fields(Ftime and Ftrans_error)
text = S(1).Ftime,S(1).Ftrans_error,S(2).Ftime,S(2).Ftrans_error,S(3).Ftime,S(3).Ftrans_error
'text' is a string type. I need to make this variable because the size of 'text' changes with the number of variables the structure S contains.
If I do plot(text) I get the following error : Error using plot. Invalid first data argument.
If I write directly
plot(S(1).Ftime,S(1).Ftrans_error,S(2).Ftime,S(2).Ftrans_error,S(3).Ftime,S(3).Ftrans_error) it works properly.
I think the problem is that when I create the variable 'text' it considers I want to plot a string.
So how can I make this 'text' variable an order which plot can execute? I would really apreciate your help. If you need further information to understand the problem please tell me.
Thank you very much in advance!

  3 Comments

Stephen Cobeldick
Stephen Cobeldick on 10 Feb 2017
I suspect that this will be relevant:
It appears to be an attempt to use strings to select data for plotting. Not likely to be very robust. Perhaps use indexing, or switch, or use the strings to select from fields of a structure of numeric data.
Aurea94
Aurea94 on 10 Feb 2017
Thank you. I read this and I know that is not the best way, but I cannot do it with a switch becaouse I would need to do the same number of cases as files (there are much more than the 3 I wrote in the exambple to explain you my problem).
I don't understand when you tell me "use the strings to select from fields of a structure of numeric data".
Thanks!
Stephen Cobeldick
Stephen Cobeldick on 10 Feb 2017
@Aurea94: somewhere you have some numeric data. Hopefully not in lots of separate variables (read the link to know why that would be a really bad idea). If you have sensibly kept your numeric data in a structure then you can simply access the fields (and your numeric data) from that structure using those strings:

Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 10 Feb 2017
Please do not name a variable "text" as that interferes with using the key graphics routine text().
What you should be doing is putting your values into a cell array, and then doing cell expansion.
thisorder = {S(1).Ftime,S(1).Ftrans_error, S(2).Ftime, S(2).Ftrans_error, S(3).Ftime,S(3).Ftrans_error};
plot(thisorder{:});

  1 Comment

Aurea94
Aurea94 on 10 Feb 2017
Thank you Walter. In fact my variable is named 'text_plot' but I didn't write it to shorten my text. It wasn't a good idea, sorry! I tried what you propose. But I get the same error mentioned before.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!