What variable can I put into find()?

22 views (last 30 days)
Lee Lewis
Lee Lewis on 23 Jun 2022
Answered: dpb on 23 Jun 2022
I'm struggling to figure out what variable to put into find(). The goal is to put in the mouses x-cordinate location into the graph with the goal of extracting ALL of the correlating y values for the row#. I will post the code below.
This is the working code:
%clear
clear;
%recieve file
%have user select a file with pop up window
%Can only grab CSV files
[file,path,indx] = uigetfile(".csv", 'Select a file');
Error using matlab.internal.lang.capability.Capability.require
Support for Java user interfaces is required, which is not available on this platform.

Error in uigetfile (line 117)
Capability.require(Capability.Swing);
%modify with opts to get rid of NaNs
opts = detectImportOptions(file);
opts = setvartype(opts, 'char');
%read the table
data = readtable(file,opts);
%get the number of rows and columns
numRows = height(data);
numCols = width(data);
%extracting Header titles for describing the frequency that the antennas are
%Transmitting and recieving at.
titleTx = data{1,1};
titleTxValue=data{1,2};
titleHz=data{1,3};
titleRx=data{2,1};
titleRxValue=data{2,2};
titleHz2=data{2,3};
%Turn 1x1 cell arrays into strings in order to make title
titleTxString = char(titleTx);
titleTxValueString = char(titleTxValue);
titleHzString = char(titleHz);
titleRxString = char(titleRx);
titleRxValueString = char(titleRxValue);
titleHz2String = char(titleHz2);
%Combine title values in order to put in one line on graph
titleCombo = {titleTxString ,titleTxValueString,titleHzString, titleRxString, titleRxValueString, titleHz2String};
str = strjoin(titleCombo);
%generate figure
f1 = figure(1);
cla; hold on; grid on;
xAxisTitleFreq = data{3,1};
xAxisDataFreq = cellfun(@str2num,data{4:end,1});
%for loop for generating data under headers i.e(frequency, EMI, etc.)
for i=2:numCols
%Extract data from readData
%converts yaxisDataPwr string to a double
yAxisDataPwr = str2double(data{4:end,i});
%grab data for legend
legendHeaderNames = char(data{3,i});
%Plot data
plot(xAxisDataFreq, yAxisDataPwr,'DisplayName', legendHeaderNames);
end
%data Cursor mode, this allows the data point closest to the cursor to be
%displayed after the user clicks the left mouse button.
dcm = datacursormode;
dcm.Enable = 'on';
dcm.DisplayStyle = 'window';
%labeling x&y axis and title
% y-axis is is db but some data points are in dBM, may need to go back and
% try and modify IDK tho.
title(str);
xlabel(xAxisTitleFreq);
ylabel("dB");
lgd=legend;
legend show;
%modifies the number of columns in the legend
lgd.NumColumns = 3;
This is the code that I am trying to add, the issue is that MATLAB isn't recognizing C(1,1) as a variable (which i'm pretty sure is the x cordinate of the mouse location).
%generates table, will use for interperlation
bTest = data{4:end,1:end};
%Take firsrt column (frequency values) from bTest
firstCol = bTest(:,1);
%find still figuring this out
k=find(C(1,1)<firstCol(end));
m=[k(end),k(end)+1];
%Testing purposes: trying to get a and y cordinates
fig2 = uifigure;
holder = [0,0];
tab = uitable(fig2,'Data',holder,'ColumnName',{'X Coord','Y Coord'});
set (gcf, 'WindowButtonMotionFcn', {@mouseMove,tab});
function mouseMove (src,event,tab)
C = get (gca, 'CurrentPoint');
title(gca, ['(X,Y) = (', num2str(C(1,1)), ', ',num2str(C(1,2)), ')']);
MousePt = [C(1,1),C(1,2)];
tab.Data = MousePt;
end
ANY help would be greatly appreciated!

Accepted Answer

dpb
dpb on 23 Jun 2022
" MATLAB isn't recognizing C(1,1) as a variable (which i'm pretty sure is the x cordinate of the mouse location). "
There is no reference to a variable C in the above code prior to that line -- it ("C") is ONLY a local variable in the callback function -- as soon as the callback function terminates, C goes out of scope and is not available anywhere except inside the callback. Hence, the error -- C simply does not exist in the user code, only in the callback.
the data structure tab contains the array, however; that's what you should be referencing.
function mouseMove (src,event,tab)
C = get (gca, 'CurrentPoint');
title(gca, ['(X,Y) = (', num2str(C(1,1)), ', ',num2str(C(1,2)), ')']);
tab.MousePt=C(1,1:2);
end
I modified your callback routine a little to make the struct field name somewhat more meaningful and a tiny bit more legible/efficient by using colon indexing to get the first two elements of the returned position array instead of the [] and explicit element addresses.

More Answers (0)

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!