Как я могу отображать числа с более высокой точностью в курсоре данных 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 ответов
код сведения не теряет точность, отображение Курсора данных просто не показывает полная точность, чтобы текстовые поля были более разумного размера. Однако, если вы хотите увеличить точность отображения в текстовой подсказке, вы можете настроить его.
если вы щелкните правой кнопкой мыши на текстовом поле Курсора данных, вы увидите следующее меню:
если вы выберите Редактировать Текст функция обновления... опция, она откроет 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-файл на путь.
теперь ваш текст datatip должен отображать больше точности для ваших чисел. Если вы хотите выполнить все вышеперечисленное программно, вы сначала создадите функцию обновления текста, сохраните ее в файл (например,'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-open:
C:\Program файлы\Матлаб\R2007b\панели инструментов\Матлаб\графика\@графика\@datacursor\default_getDatatipText.м
или аналогичный файл в зависимости от вашей версии и изменения DEFAULT_DIGITS.
Не цитируйте меня по этому поводу, но:
1) Вы не потеряли точность, MATLAB хранит полное значение, это только дисплей, который был урезан.
2) в моей версии MATLAB (R2009a) я могу изменить способ отображения длинных чисел в меню команд, перейдя в
Файл>Настройки>Редактор Переменных
где выпадающее меню позволяет мне выбирать между коротким, длинным, коротким e, длинным e, коротким g, длинным g, коротким eng, длинным eng, bank, + и крыса.
Я понятия не имею, влияет ли это на то, что показывает курсор данных.