Как я могу отображать числа с более высокой точностью в курсоре данных MATLAB?
У меня проблема с потерей точности. Я импортировал набор значений из файла CSV в MATLAB 7, используя следующий код:
function importfile(fileToRead1)
%#IMPORTFILE(FILETOREAD1)
%# Imports data from the specified file
%# FILETOREAD1: file to read
DELIMITER = ',';
HEADERLINES = 0;
%# Import the file
rawData1 = importdata(fileToRead1, DELIMITER, HEADERLINES);
%# For some simple files (such as a CSV or JPEG files), IMPORTDATA might
%# return a simple array. If so, generate a structure so that the output
%# matches that from the Import Wizard.
[~,name] = fileparts(fileToRead1);
newData1.(genvarname(name)) = rawData1;
%# Create new variables in the base workspace from those fields.
vars = fieldnames(newData1);
for i = 1:length(vars)
assignin('base', vars{i}, newData1.(vars{i}));
end
Этот очень простой скрипт просто берет указанный файл:
> 14,-0.15893555
> 15,-0.24221802
> 16,0.18478394
И преобразует второй столбец в:
14 -0,158935550000000
15 -0,242218020000000
16 0,184783940000000
Однако, если я выберу точку с помощью курсора данных, она отобразит только 3 или 4 цифры точности:
Есть ли способ запрограммировать более высокую точность, чтобы получить более точные данные?
3 ответа
Ваши данные не теряют точности, дисплей курсора данных просто не показывает полную точность, поэтому текстовые поля имеют более разумный размер. Однако, если вы хотите повысить точность отображения в текстовой подсказке, вы можете настроить ее.
Если вы щелкнете правой кнопкой мыши по текстовому полю "Курсор данных", вы увидите следующее меню:
Если вы затем выберите опцию Edit Text Update Function..., он откроет m-файл по умолчанию, содержащий следующее:
function output_txt = myfunction(obj, event_obj)
% Display the position of the data cursor
% obj Currently not used (empty)
% event_obj Handle to event object
% output_txt Data cursor text string (string or cell array of strings).
pos = get(event_obj, 'Position');
output_txt = {['X: ', num2str(pos(1), 4)], ...
['Y: ', num2str(pos(2), 4)]};
% If there is a Z-coordinate in the position, display it as well
if length(pos) > 2
output_txt{end+1} = ['Z: ', num2str(pos(3), 4)];
end
Обратите внимание, что текст для координатных данных X и Y отформатирован с использованием num2str
со вторым аргументом, являющимся 4
, Это преобразует значение координаты в строковое представление с точностью до 4 цифр. Если вы хотите, чтобы отображалось больше цифр, просто увеличьте это число, а затем сохраните вновь созданный m-файл на своем пути.
Теперь ваш текст всплывающей подсказки должен отображать больше точности для ваших чисел. Если вы хотите выполнить все вышеперечисленное программно, вы сначала должны создать функцию обновления текста, сохранить ее в файл (например, 'updateFcn.m'
), затем включите курсоры данных с помощью функции datacursormode
и установите их для использования вашей пользовательской функции обновления текста. Вот пример:
plot(1:10, rand(1, 10)); % Plot some sample data
dcmObj = datacursormode; % Turn on data cursors and return the
% data cursor mode object
set(dcmObj, 'UpdateFcn', @updateFcn); % Set the data cursor mode object update
% function so it uses updateFcn.m
Если вы хотите сделать постоянное изменение - Внимание: это небольшой взлом MATLAB - откройте:
C: \ Program Files \ Matlab \ R2007b \ toolbox \ matlab \ graphics \ @graphics \ @datacursor \ default_getDatatipText.m
или аналогичный файл в зависимости от вашей версии и изменения DEFAULT_DIGITS.
Не цитируйте меня по этому поводу, но:
1) Вы не потеряли точность, MATLAB сохраняет полное значение, это только дисплей, который был урезан.
2) В моей версии MATLAB (R2009a) я могу изменить способ отображения длинных чисел в командном меню, перейдя в
Файл> Настройки> Редактор переменных
где выпадающее меню позволяет выбрать между коротким, длинным, коротким e, длинным e, коротким g, длинным g, коротким англом, длинным англом, банком, + и крысой.
Я понятия не имею, влияет ли это на то, что показывает Курсор Данных, все же.
Вы можете добавить в свой скрипт следующее:
dcm_obj = datacursormode(fig);
set(dcm_obj,'Updatefcn',@myfunction_datacursor);
Вам нужно создать и сохранить myfunction_datacursor
файл со следующим в вашем пути (получить путь, вызвав path
в приглашении MATLAB)
function output_txt = myfunction_datacursor(obj,event_obj)
% Display the position of the data cursor
% obj Currently not used (empty)
% event_obj Handle to event object
% output_txt Data cursor text string (string or cell array of strings).
pos = get(event_obj,'Position');
output_txt = {['X: ',num2str(pos(1),8)],...
['Y: ',num2str(pos(2),4)]};
% If there is a Z-coordinate in the position, display it as well
if length(pos) > 2
output_txt{end+1} = ['Z: ',num2str(pos(3),8)];
end