web-dev-qa-db-ja.com

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

そして、2番目の列を次のように変換します。

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

ただし、データカーソルでポイントを選択すると、3桁または4桁の精度しか表示されません。

imprecise labels

より正確なデータポイントを取得するためにより高い精度をプログラムする方法はありますか?

14
wishi

dataの精度は失われていません。データカーソルの表示はshowing完全な精度ではないため、テキストボックスのサイズはより適切です。ただし、テキストデータチップの表示の精度を高めたい場合は、 カスタマイズできます です。

データカーソルテキストボックスを右クリックすると、次のようなメニューが表示されます。

enter image description here

次に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 を使用してフォーマットされ、2番目の引数は4であることに注意してください。これにより、座標値が4桁の精度の文字列表現に変換されます。より多くの桁を表示したい場合は、この数を増やして、新しく作成したmファイルを path に保存します。

これで、データヒントのテキストに、数値の精度が上がるはずです。上記のすべてを達成したい場合programmaticallyは、まずテキスト更新関数を作成し、それをファイル('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
29
gnovice

恒久的な変更を行いたい場合-警告:これはMATLABへのわずかなハックです-開く:

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

または、バージョンに応じて同様のファイルを作成し、DEFAULT_DIGITSを変更します。

6
Charles L.

これについて私に引用しないでください。

1)精度は失われていません。MATLABは完全な値を保存します。それは、削減されたディスプレイだけです。

2)私のバージョンのMATLAB(R2009a)では、次のようにして、コマンドメニューに長い数字を表示する方法を変更できます。

ファイル>設定>変数エディター

ドロップダウンメニューでは、ショート、ロング、ショートe、ロングe、ショートg、ロングg、ショートエン、ロングエン、バンク、+、ラットから選択できます。

しかし、それがデータカーソルの表示に影響するかどうかはわかりません。

2
medivh