Вопрос

У меня есть три параметра: x , y и t . Но проблема в моей файловой структуре.

Мои файлы названы как

e_x_y.txt
t_x_y.txt

где e_x_y.txt имеет ошибку для определенных значений x и y и t_x_y.txt соответствующие значения времени.

Мне нужно отобразить значения в e_x_y.txt на графике x vs y vs t .

Каков наилучший способ сделать это?

Я знаю, что такое значения x и y, поэтому мне не нужно вычитать их из имен файлов.

<Ч>

Чтобы сделать вещи более понятными,

предположим, мои файлы:

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

Я хочу построить следующие точки:

(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
Это было полезно?

Решение

Тип сюжета, который вы пытаетесь создать, может быть трудно хорошо визуализировать. Я могу дать вам два предложения: одно - то, что вы хотите , и одно - то, что вы, вероятно, должны делать вместо этого ...

Построение 4-D данных:

Для этого вам нужно будет построить серию точек x, y, t и как-то представить значение ошибки e в каждой точке. Вы можете сделать это, изменив цвет или размер точки. В этом примере я построю сферу в каждой точке с диаметром, который изменяется в зависимости от ошибки (диаметр 1 соответствует максимальной ожидаемой ошибке). Цвет представляет время. Я буду использовать пример данных, которые вы добавили в вопрос (отформатированный в виде матрицы 5 на 4 со столбцами, содержащими x , y , t и e data):

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');

А вот как это будет выглядеть:

 введите описание изображения здесь

Проблема: Хотя сюжет выглядит довольно интересным, он не очень интуитивно понятен. Кроме того, построение множества точек таким образом будет загромождено, и будет трудно увидеть их все хорошо.

Более интуитивно понятный трехмерный сюжет:

Может быть лучше вместо этого сделать трехмерный график данных, поскольку его легче интерпретировать. Здесь ось X представляет номер итерации, а ось Y представляет каждую отдельную сеть:

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)

Это дает намного более четкий сюжет:

 введите описание изображения здесь

Другие советы

Хотя я не уверен, что это лучший способ визуализации данных, вот простой способ сделать это, как вы просили. Вы можете нанести трехмерные точки на простой точечный график и отобразить размер ИЛИ цвет на значения четвертого измерения error . Что-то вроде:

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 size

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top