Question

J'ai trois paramètres x , y et t . Mais le problème est ma structure de fichier.

Mes fichiers sont nommés comme:

e_x_y.txt
t_x_y.txt

e_x_y.txt contient l'erreur pour des valeurs particulières de x et y et t_x_y.txt a valeurs de temps correspondantes.

Je dois tracer les valeurs dans e_x_y.txt sur un graphique x vs y vs t .

Quel est le meilleur moyen de le faire?

Je sais ce que sont les valeurs x et y, je n'ai donc pas à les déduire des noms de fichiers.

Pour clarifier les choses,

supposons que mes fichiers sont:

e_4_5.txt
45
54
t_4_5.txt
2.0
6.0

e_7_8.txt
32
98
121
t_7_8.txt
2
9
1.0

Je veux tracer les points suivants:

(4,5,2.0) = 45
(4,5,6.0) = 54
(7,8,2.0) = 32 
(7,8,9.0) = 98
(7,8,1.0) = 121
Était-ce utile?

La solution

Le type d’intrigue que vous essayez de créer peut être difficile à visualiser. Je peux vous donner deux suggestions: l’une est ce que vous voulez et l’autre, ce que vous devriez probablement faire à la place ...

Représentation graphique des données 4-D:

Pour ce faire, vous devrez tracer une série de points x, y, t et représenter en quelque sorte la valeur d'erreur e à chaque point. Vous pouvez le faire en modifiant la couleur ou la taille du point. Dans cet exemple, je vais tracer une sphère en chaque point avec un diamètre qui varie en fonction de l'erreur (un diamètre égal à 1 équivaut à l'erreur maximale attendue). La couleur représente le temps. Je vais utiliser les exemples de données que vous avez ajoutés à la question (sous la forme d'une matrice 5 sur 4 ) avec les colonnes contenant le x , y , t et e données):

data = [4 5 2 45; 4 5 6 54; 7 8 2 32; 7 8 9 98; 7 8 1 121];
[x, y, z] = sphere;  % Coordinate data for sphere
MAX_ERROR = 121;     % Maximum expected error
for i = 1:size(data, 1)
  c = 0.5*data(i, 4)/MAX_ERROR;  % Scale factor for sphere
  X = x.*c+data(i, 1);           % New X coordinates for sphere
  Y = y.*c+data(i, 2);           % New Y coordinates for sphere
  Z = z.*c+data(i, 3);           % New Z coordinates for sphere
  surface(X, Y, Z, 'EdgeColor', 'none');  % Plot sphere
  hold on
end
grid on
axis equal
view(-27, 16);
xlabel('x');
ylabel('y');
zlabel('t');

Et voici à quoi cela ressemblerait:

 entrer la description de l'image ici

Le problème: Bien que l’intrigue semble intéressante, elle n’est pas très intuitive. Aussi, tracer de nombreux points de cette façon sera encombré et il sera difficile de tous les voir bien.

Tracé 3D plus intuitif:

Il peut être préférable de créer un graphique en 3D des données, car il peut être plus facile à interpréter. Ici, l’axe des x représente le numéro d’itération et l’axe des y représente chaque réseau individuel:

plot3(1:2, [1 1], [2 45; 6 54]);           % Plot data for network 4-5
hold on
plot3(1:3, [2 2 2], [2 32; 9 98; 1 121]);  % Plot data for network 7-8
xlabel('iteration number');
set(gca, 'YTick', [1 2], 'YTickLabel', {'network 4-5', 'network 7-8'})
grid on
legend('time', 'error')
view(-18, 30)

Ceci produit un tracé beaucoup plus clair:

 entrer la description de l'image ici

Autres conseils

Même si je ne suis pas convaincu que ce soit le meilleur moyen de visualiser les données, voici un moyen simple de le faire comme vous l'avez demandé. Vous pouvez tracer les points 3D dans un diagramme de dispersion simple et mapper la taille OU la couleur sur les valeurs de la quatrième dimension erreur . Quelque chose comme:

x = randi(20, [10 1]);
y = randi(20, [10 1]);
t = randi(10, [10 1]);
e = randi(200, [10 1]);

% map `e` to color
figure(1)
scatter3(x, y, t, 200, e, 'filled')
xlabel('x'), ylabel('y'), zlabel('t')
colormap(hot), colorbar

% map `e` to size
figure(2)
scatter3(x, y, t, e, 'filled')
xlabel('x'), ylabel('y'), zlabel('t')

color taille

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top