Как я могу отображать числа с более высокой точностью в курсоре данных MATLAB? - PullRequest
14 голосов
/ 11 мая 2011

У меня проблема с потерей точности. Я импортировал набор значений из файла 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 цифры точности:

imprecise labels

Есть ли способ запрограммировать более высокую точность для получения более точных точек данных?

Ответы [ 3 ]

29 голосов
/ 11 мая 2011

Ваши данные не теряют точности, дисплей курсора данных просто не показывает полную точность, так что текстовые поля имеют более приемлемый размер. Однако, если вы хотите повысить точность отображения в текстовой подсказке, вы можете настроить его .

Если щелкнуть правой кнопкой мыши текстовое поле «Курсор данных», вы должны увидеть следующее меню:

enter image description here

Если вы затем выберите опцию Изменить текстовое обновление ... , откроется 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
6 голосов
/ 22 июля 2011

Если вы хотите сделать постоянное изменение - Внимание: это небольшой взлом MATLAB - откройте:

C: \ Program Files \ Matlab \ R2007b \ toolbox \ matlab \ graphics \ @graphics \ @datacursor \ default_getDatatipText.m

или аналогичный файл в зависимости от вашей версии и изменения DEFAULT_DIGITS.

2 голосов
/ 11 мая 2011

Не цитируйте меня по этому поводу, но:

1) Вы не потеряли точность, MATLAB сохраняет полное значение, это только дисплей, который был урезан.

2) В моей версии MATLAB (R2009a) я могу изменить способ отображения длинных чисел в командном меню, перейдя в

Файл> Настройки> Редактор переменных

, где позволяет раскрывающееся менюя могу выбрать между коротким, длинным, коротким e, длинным e, коротким g, длинным g, коротким англ, long eng, банком, + и крысой.

Я понятия не имею, влияет ли это на то, что показывает курсор данных,хотя.

...