14

精度の低下に問題があります。次のコードを使用して、CSVファイルからMATLAB7に値のセットをインポートしました。

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桁の精度しか表示されません。

不正確なラベル

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

4

4 に答える 4

33

データの精度が失われることはありません。データ カーソルの表示は完全な精度を示していないため、テキスト ボックスはより適切なサイズになっています。ただし、テキスト データヒントの表示の精度を上げたい場合は、カスタマイズできます

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

ここに画像の説明を入力

その後、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 ファイルをパスに保存します。

これで、データヒント テキストに数値の精度が向上するはずです。上記のすべてをプログラムで実行したい場合は、最初にテキスト更新関数を作成し、それをファイル ( など) に保存してから、関数を'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
于 2011-05-11T14:43:25.253 に答える
6

永続的な変更を行いたい場合 - 警告: これは MATLAB へのちょっとしたハックです - 開く:

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

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

于 2011-07-22T14:44:46.503 に答える
2

これについて私を引用しないでください、しかし:

1)精度を失うことはなく、MATLABは完全な値を格納します。これは、表示が削減されただけです。

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

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

ドロップダウンメニューでは、short、long、short e、long e、short g、long g、short eng、long eng、bank、+、ratから選択できます。

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

于 2011-05-11T09:51:47.473 に答える
0

スクリプトに次を追加できます。

dcm_obj = datacursormode(fig);
set(dcm_obj,'Updatefcn',@myfunction_datacursor);

パスに次のファイルを作成して保存する必要があります ( MATLAB プロンプトでmyfunction_datacursor呼び出してパスを取得します)。path

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
于 2020-05-21T08:47:08.920 に答える