Multiple inputs for one graph

2 次查看(过去 30 天)
I'm trying to figure out a way to attach 3 specific inputs so that they plot different points. Idealy the outputs are all on the same graph, but I'm having trouble with it. I also need to attach it into a GUI which I've never done before.
My curent attempt isn't great. Any help would be appreciated.
disp('Please input a weight and radius for one of the disks.')
UserInputs=input('Please choose a disk (Disk 1, Disk 2, Disk 3):','s')
if UserInputs==('Disk 1')
kg_1=input('Weight: \n');
r_1=input('Radius: \n');
elseif UserInputs==('Disk 2')
kg_2=input('Weight: \n');
r_2=input('Radius: \n');
elseif UserInputs==('Disk 3')
kg_3=input('Weight: \n');
r_3=input('Radius: \n');
end
switch UserInputs
case 'Disk 1'
figure(1)
plot(x1,y1)
case 'Disk 2'
figure(1)
plot(x2,y2)
case 'Disk 3'
figure(1)
plot(x3,y3)
end
x1=1
x2=2;
x3=3;
y1=(1./2).*kg_1.*r_1.^2
y2=(1./2).*kg_2.*r_2.^2
y3=(1./2).*kg_3.*r_3.^2

采纳的回答

Voss
Voss 2022-3-24
Use strcmp() to compare character vectors; don't use == for that.
And if you're plotting one point at a time, you have to use a Marker so you can actually see the point on the axes. I've put markers ('o','s','d') <=> (circle, square, diamond) in the calls to plot().
And use hold on so that subsequent calls to plot() don't clear out what was already plotted.
The code below will take user-input for (and plot) one point. You can put the code inside a for loop or a while loop to make it take all three inputs, or just run it three times as it is.
disp('Please input a weight and radius for one of the disks.')
UserInputs=input('Please choose a disk (Disk 1, Disk 2, Disk 3):','s')
if strcmp(UserInputs,'Disk 1')
kg_1=input('Weight: \n');
r_1=input('Radius: \n');
elseif strcmp(UserInputs,'Disk 2')
kg_2=input('Weight: \n');
r_2=input('Radius: \n');
elseif strcmp(UserInputs,'Disk 3')
kg_3=input('Weight: \n');
r_3=input('Radius: \n');
end
switch UserInputs
case 'Disk 1'
figure(1)
hold on
x1=1;
y1=(1./2).*kg_1.*r_1.^2;
plot(x1,y1,'o')
case 'Disk 2'
figure(1)
hold on
x2=2;
y2=(1./2).*kg_2.*r_2.^2;
plot(x2,y2,'s')
case 'Disk 3'
figure(1)
hold on
x3=3;
y3=(1./2).*kg_3.*r_3.^2;
plot(x3,y3,'d')
end
  2 个评论
Olivia Rose
Olivia Rose 2022-3-24
编辑:Olivia Rose 2022-3-24
Thank you
Could you tell me, how would I attach this to a GUI app dropdown list?
For example, this is the original code for the dropdown box
% Create DropDownLabel
app.DropDownLabel = uilabel(app.UIFigure);
app.DropDownLabel.HorizontalAlignment = 'right';
app.DropDownLabel.Position = [36 425 66 22];
app.DropDownLabel.Text = 'Drop Down';
% Create DropDown
app.DropDown = uidropdown(app.UIFigure);
app.DropDown.Items = {'Disk 1', 'Disk 2', 'Disk 3'};
app.DropDown.Position = [117 425 100 22];
app.DropDown.Value = 'Disk 1';
Voss
Voss 2022-3-24
编辑:Voss 2022-3-24
I assume this is in AppDesigner.
Give your DropDown a ValueChangedFcn called vcfDropDown (by clicking on the DropDown in Design View and selecting Callbacks in the Component Browser on the right).
Then in Code View, define vcfDropDown as follows (this assumes you have a UIAxes in your app called app.UIAxes - and that that's where you want to plot the points):
function vcfDropDown(app,evt)
disk_idx = find(strcmp(app.DropDown.Items,app.DropDown.Value));
kg = input('Weight: \n');
r = input('Radius: \n');
hold(app.UIAxes,'on');
markers = 'osd';
plot(app.UIAxes,disk_idx,(1./2).*kg.*r.^2,markers(disk_idx));
end
This is still taking user-input from the command-line, but I assume that ultimately you'll want to have UI components where the user would enter those things.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 2-D and 3-D Plots 的更多信息

标签

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by