How can I plot using a string in MATLAB?
39 次查看(过去 30 天)
显示 更早的评论
I am looking to automate some plotting for work and needing to know how I can take a variable string (string changes based upon selection in MATLAB GUI) and then use that to generate a plot.
Example..
function plotting_fcn(bool1, bool2, boo3)
x1 = [1,2,3,4,5];
y1 = [10,20,30,40,50];
y2 = [20,30,40,50,60];
y3 = [30,40,50,60,70];
y4 = [30,40,50,60,70];
str = 'x, [y1';
if(bool1 == 1)
str = strcat(str, ',y2');
end
if(bool2 == 1)
str = strcat(str, ',y3');
end
if(bool3 == 1)
str = strcat(str, ',y4');
end
str = strcat(str, '];');
% HOWEVER I CAN CONVERT str INTO SOMETHING THAT CAN BE PLOTTED.
plot(x, str)
end
If there is another way to do this I am all ears (eyes), but I don't want to have to create plotting code for each of the 3! scenarios that exist for this plot.
Please Help,
Thanks,
Kellen
3 个评论
Andrew Newell
2015-3-5
The variable x isn't defined. Do you mean x1? Also, y3 and y4 are identical. Should they be?
回答(3 个)
Andrew Newell
2015-3-5
编辑:Andrew Newell
2015-3-5
It's not necessary to have all those conditional statements. Just use indexing:
function plotting_fcn(idx)
% Note: idx could be Boolean or it could be one or more numbers between 1
% and 4.
x = [1,2,3,4,5];
y = [10,20,30,40,50; ...
20,30,40,50,60; ...
30,40,50,60,70; ...
30,40,50,60,70];
plot(x, y(idx,:))
end
You could plot the second curve using
plotting_fcn([false true false false])
or
plotting_fcn(2)
3 个评论
Andrew Newell
2015-3-5
Strings are still a clumsy way of doing it. Given the revised statement of the problem, I would suggest
function varargout = reporting_GUI(varargin)
function run_btn_Callback(hObject, eventdata, handles)
choices = ([1 checkbox1 checkbox2 checkbox3] == 1);
plt_str(choices)
end
function plt_str(choices)
x1 = [1,2,3,4,5];
y = [10,20,30,40,50; ...
20,30,40,50,60; ...
30,40,50,60,70; ...
40,50,60,70,80];
plot(x1,y(choices,:))
end
Now it's robust. Note that now the first element in choices is always 1, which answers your second objection.
Andrew Newell
2015-3-5
For completeness, here is how to do it with a string:
eval(['plot(',str,')'])
David Barry
2015-3-5
function plotting_fcn(bool1, bool2, bool3)
x1 = [1,2,3,4,5];
y1 = [10,20,30,40,50];
y2 = [20,30,40,50,60];
y3 = [30,40,50,60,70];
y4 = [30,40,50,60,70];
data = y1;
if(bool1 == 1)
data = [data; y2];
end
if(bool2 == 1)
data = [data; y3];
end
if(bool3 == 1)
data = [data; y4];
end
plot(x1, data)
end
4 个评论
David Barry
2015-3-5
编辑:David Barry
2015-3-5
I just went on what you gave and solved the problem in hand. It's not clear from your description exactly what you are trying to do. I suggest including the actual code and an example of the struct you are passing as an input to the plotting function.
Oran Levi
2021-4-26
function [text] = lines_intersect(str1,str2)
%UNTITLED4 Summary of this function goes here
% Detailed explanation goes here
x=linspace(-10,10)
plot(x,str1,'r-',x,str2,'g-')
plot(,,'r*')
xlabel('x');
ylabel('y');
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Distribution Plots 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!