Подтвердить что ты не робот

Как я могу отображать числа с более высокой точностью в курсоре данных 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

Этот самый базовый script просто принимает указанный файл:

> 14,-0.15893555 
> 15,-0.24221802
> 16,0.18478394

И преобразует второй столбец в:

14  -0,158935550000000
15  -0,242218020000000
16  0,184783940000000

Однако, если я выбираю точку с помощью Data Cursor, она отображает только 3 или 4 цифры точности:

imprecise labels

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

4b9b3361

Ответ 1

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

Если вы щелкните правой кнопкой мыши текстовое поле Data Cursor, вы увидите следующее меню:

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 файл на path.

Теперь ваш текст datatip должен показывать больше точности для ваших номеров. Если вы хотите выполнить все вышеперечисленное программное обеспечение, сначала создайте функцию текстового обновления, сохраните ее в файле (например, 'updateFcn.m'), затем включите Data Cursors, используя функцию 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

Ответ 2

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

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

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

Ответ 3

Не цитируйте меня на этом, но:

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

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

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

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

Я не знаю, влияет ли это на то, что показывает Data Cursor.