2011-05-11 3 views
12

정밀 손실에 문제가 있습니다.MATLAB 데이터 커서에 더 높은 정밀도로 숫자를 표시하려면 어떻게합니까?

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 

을하고 두 번째 열을 변환합니다

다음 코드를 사용하여 MATLAB 7에 CSV 파일의 값 세트를 가져
14 -0,158935550000000 
15 -0,242218020000000 
16 0,184783940000000 

그러나, 나는 단지 정밀도 3 또는 4 자리 숫자 표시하는 데이터 커서가있는 지점 선택하는 경우 :

imprecise labels

더 정확한 데이터 포인트를 얻기 위해 더 높은 정밀도를 프로그래밍하는 방법이 있습니까?

답변

23

귀하의 데이터 정밀 손실되지 않으며, 데이터 커서 표시는 텍스트 상자가 더 적당한 크기가되도록 전체 정밀도를 표시되지 이다. 그러나 텍스트 데이터 팁에서 디스플레이의 정밀도를 높이려면 you can customize it을 지정하십시오.

당신이 바로 데이터 커서 텍스트 상자를 클릭하면이 같은 메뉴가 나타납니다 : 그런 다음 편집 텍스트 업데이트 기능 ... 옵션을 선택하면,

enter image description here

을가한다 두 번째 인수는 인으로 NUM2STR를 이용하여 X 및 Y 좌표 데이터를 텍스트 포맷 것을

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 

공지 : 다음을 포함하는 기본 m 파일을 열고 4. 좌표 값을 4 자리 정밀도의 문자열 표현으로 변환합니다. 더 많은 숫자를 표시하려면이 숫자를 늘린 다음 새로 생성 된 m 파일을 path에 저장하면됩니다.

이제 데이터 팁 텍스트의 숫자가 더 정확하게 표시되어야합니다. 위의 모든 내용을 프로그래밍 방식으로을 수행하려면 먼저 텍스트 업데이트 함수를 작성하여 파일 (예 : '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 
+0

답변 해 주셔서 감사합니다. 나에게 많은 타이핑을 저장해 둡니다. – Jonas

+0

위대한 답변을 주셔서 감사합니다! 필자는 필요한 정밀도를 얻기 위해 항상 "작업 영역으로 커서 내보내기"작업을 수행했습니다. 이것은 매우 유용한 트릭입니다. – nibot

+0

이것은 좋은 대답이지만, 나는 그것이 나쁜 대답으로 믿을 수 없다고 생각하는 유일한 사람입니까? –

2

이 날을 인용,하지만하지 마십시오

1) 분실하지 않은 정밀도, MATLAB 저장 전체 가치, 그것은 아래로 깎았 된 경우에만 표시됩니다. MATLAB (R2009a의 내 버전에서

2)) 나는 드롭 다운 메뉴가 날 수 있습니다 긴 숫자가

파일> 환경 설정으로 이동하여 명령 메뉴에 표시되는 방식> 변수 편집기

을 수정할 수 있습니다 짧은, 긴, 짧은 e, 긴 e, 짧은 g, 긴 g, 짧은 eng, 긴 eng, 은행, + 및 쥐 중에서 선택하십시오.

데이터 커서가 표시하는 내용에 영향을 주는지는 알 수 없습니다.

5

영구적 인 변화를 확인하려면 - 경고 :이 MATLAB에 약간의 해킹 - 오픈 :

C : \ 프로그램 파일 \ matlab에 \ R2007b \ 도구 \ MATLAB \ graphics \ @graphics \ @datacursor \ default_getDatatipText.m

또는 이와 유사한 파일 (버전에 따라 다름) 및 DEFAULT_DIGITS 변경

관련 문제