2011-05-11 16 views
12

Tengo un problema con la pérdida de precisión. Me importa un conjunto de valores de un archivo CSV en MATLAB 7 usando el siguiente código:¿Cómo puedo visualizar los números con mayor precisión en un cursor de datos 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 

Este script muy básico sólo se necesita el archivo especificado:

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

y convierte la segunda columna a:

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

Sin embargo, si selecciono un punto con el cursor de datos sólo muestra 3 o 4 dígitos de precisión:

imprecise labels

¿Hay alguna manera de programar una mayor precisión para obtener puntos de datos más exactos?

Respuesta

23

Sus datos es no perder precisión, la visualización de datos cursor justo no es mostrando la precisión completa para que las cajas de texto son de un tamaño más razonable. Sin embargo, si desea aumentar la precisión de la pantalla en la información sobre el texto, you can customize it.

Si hace clic en un cuadro de texto Datos del cursor, debería ver un menú como este:

enter image description here

Si a continuación selecciona la Editar texto Actualización de la función ... opción, se abrir un archivo-m predeterminada que contiene lo siguiente:

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 

Observe que el texto para la coordenadas X e y de datos se formatea utilizando NUM2STR, con el segundo argumento de ser una 4. Esto convierte el valor de la coordenada en una representación de cadena con 4 dígitos de precisión. Si desea que se muestren más dígitos, simplemente incremente este número, luego guarde el archivo m recién creado en su path.

Ahora su texto de información debería mostrar más precisión para sus números. Si desea realizar todo lo anterior programáticamente, primero debe crear su función de actualización de texto, guardarla en un archivo (como 'updateFcn.m'), luego activar los cursores de datos usando la función DATACURSORMODE y configurarlos para usar su definición de usuario función de actualización de texto.He aquí un ejemplo:

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

Gracias por la respuesta. Me salvaste un montón de tipeo. – Jonas

+0

¡Gracias por la gran respuesta! Siempre he hecho el "cursor de exportación al espacio de trabajo" para obtener la precisión necesaria. Este es un truco muy útil. – nibot

+0

Esta es una buena respuesta, pero ¿soy el único que piensa que es increíble (en un mal sentido) que esta ES la respuesta? –

2

no me mencionen en esto, pero:

1) No ha perdido precisión, almacena el valor total de MATLAB, es sólo la pantalla que ha sido recortado.

2) En mi versión de MATLAB (R2009a) Puedo modificar la forma de números largos se muestran en el menú de comandos, vaya a

Archivo> Preferencias> Editor de variables

en un menú desplegable me deja escoger entre corto, largo, corto e, largo e, corto g, largo g, corto eng, largo eng, banco, + y rata.

No tengo idea si eso afecta lo que muestra el Cursor de Datos.

5

Si quiere realizar un cambio permanente - Advertencia: Este es un pequeño truco para MATLAB - abierto:

C: \ Archivos de programa \ Matlab \ R2007b \ caja de herramientas \ MATLAB \ graphics \ @graphics \ @datacursor \ default_getDatatipText.m

o un archivo similar según su versión y cambie DEFAULT_DIGITS.

Cuestiones relacionadas