Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中绘制3D绘图?_Matlab_3d_Plot - Fatal编程技术网

如何在MATLAB中绘制3D绘图?

如何在MATLAB中绘制3D绘图?,matlab,3d,plot,Matlab,3d,Plot,我有三个参数x,y和t。但问题是我的文件结构 我的文件名为: e_x_y.txt t_x_y.txt 其中e_x_y.txt对于x和y的特定值具有错误,t_x_y.txt具有相应的时间值 我需要在x vs y vs t图形上绘制e_x_y.txt中的值。 最好的方法是什么 我知道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

我有三个参数
x
y
t
。但问题是我的文件结构

我的文件名为:

e_x_y.txt
t_x_y.txt
其中
e_x_y.txt
对于
x
y
的特定值具有错误,
t_x_y.txt
具有相应的时间值

我需要在
x vs y vs t
图形上绘制
e_x_y.txt
中的值。

最好的方法是什么

我知道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等于最大预期误差)。颜色代表时间。我将使用您添加到问题中的样本数据(格式为5x4矩阵,列中包含
x
y
t
e
数据):

下面是它的样子:

问题:虽然情节看起来很有趣,但不是很直观。而且,以这种方式绘制大量点会变得杂乱无章,很难看到所有点

更直观的三维绘图: 取而代之的可能是制作数据的三维图,因为它可能更容易解释。这里,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)
这将产生一个更清晰的图:


尽管我不认为这是可视化数据的最佳方法,但这里有一个简单的方法,可以按照您的要求进行操作。您可以在一个简单的散点图中绘制3D点,并将尺寸或颜色映射到第四维
误差
的值。比如:

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

peaks
是一个内置的MATLAB函数,在MATLAB演示中经常用作两个变量的样本函数。因此,由于我有不同的
x
y
,我应该如何定义
x
Y
Z
数组?我想我需要更多地了解您的数据具体是什么,以及如何生成这些数据来回答这个问题。@gnovice我已经在问题中添加了详细信息。请看一看。澄清一下:这些变量代表什么?您是否在不同的时间测量某物的位置(带有误差估计)?或者
x
y
t
可以用两个变量的函数来表示,比如
y=f(x,t)
?实际上,我在我的神经网络的不同配置中使用一种算法
e
是错误,
t
值是相应的时间。这些3D点是密集分布还是仅为少数几个值?这些是一些不连续点,如示例中所示。只是我有几百对这样的文件。这些是实际文件中的值。@Amro我在问题中添加了一个示例。请看一看。我不确定您的意思:
您在一个时间轴上有两个值
似乎我误解了数据的外观!从您上面的评论来看,
e
t
是为每个网络配置测量的值
(x,y)
,即:
e=f(x,y)
t=g(x,y)
。因此,将t与(x,y)和e作图是没有意义的。在我看来,你应该为每个人画两幅图function@Amro,
e
t
是同一网络上不同迭代的
error
time
值。因此,以这种方式绘制它们是有意义的。在上面的示例中,对于
网络4-5
,前两个文件,第一次迭代花了
2秒
,错误是
45
,而同一网络上的第二次迭代花了
6秒
,错误是
54
。我的意思是,把
错误
当作三个变量的函数来绘制是没有意义的
(x,y,time)
因为它不依赖于时间而只依赖于时间(x,y)<代码>时间只是同一输入的另一个函数(x,y)
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')