GUIDE user input to plot data

4 ビュー (過去 30 日間)
B_Richardson
B_Richardson 2011 年 7 月 6 日
回答済み: Image Analyst 2021 年 12 月 27 日
Hello everyone,
I have a quick question (which might also be a stupid question, forgive my ignorance in advance):
I have some data that I'm loading into my workspace from a file. The data is "result." I perform these commands on "result" in the command window.
s2 = result(1, :, 1:3);
s2 = reshape(s2, size(s2, 2),3)
I want to use "s2" in a GUI. I want to plot it like this:
function pushbutton26_Callback(hObject, eventdata, handles)
plot(handles.axes2,s2)
set(handles.axes2,'XMinorTick','on')
grid on
the end goal is to be able to allow users to select the data from the file, have those operations performed it:
s2 = result(1, :, 1:3);
s2 = reshape(s2, size(s2, 2),3);
And then plot the data. How can I do this from within my GUI? I don't expect code; just a point in the right direction would be excellent!
Thank you

回答 (2 件)

Voss
Voss 2021 年 12 月 27 日
You can call evalin() in your GUI callback to access variables in the base workspace:
function pushbutton26_Callback(hObject, eventdata, handles)
s2 = evalin('base','s2');
plot(handles.axes2,s2)
set(handles.axes2,'XMinorTick','on')
grid on
end
Ultimately this wouldn't be useful for users unless they have an s2 variable in their base workspace and it is what it should be. In the end, your GUI would control the file selection, loading, and calculations, and the relevant variables will be stored in the GUI's handles structure, say, rather than the base workspace.

Image Analyst
Image Analyst 2021 年 12 月 27 日
Usually when I see : anywhere except the last index I think you need to use squeeze. Otherwise you'll still get a 3-D array, not a 2-D array like you probably thought.
results = randi(9, 3,3,3)
results =
results(:,:,1) = 2 3 5 2 2 9 4 5 6 results(:,:,2) = 9 5 8 4 7 4 2 7 2 results(:,:,3) = 8 3 9 4 4 1 6 2 4
s2 = results(1, :, 1:3) % Still a 3-D array.
s2 =
s2(:,:,1) = 2 3 5 s2(:,:,2) = 9 5 8 s2(:,:,3) = 8 3 9
To get a 2-D slice from results you can do:
s2 = squeeze(results(1, :, 1:3)) % Now s2 is a 2-D array.
s2 = 3×3
2 9 8 3 5 3 5 8 9
This would give a 2-D array. Like Benjamin says, if s2 is in the base workspace, you can get it into your pushbutton26_Callback() workspace by using s2 = evalin('base', 's2'), though I don't think it's a good idea to be putting and getting variables from different workspaces using tricks like using the command line, using evalin(), or using assignin().

カテゴリ

Help Center および File ExchangeMigrate GUIDE Apps についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by