如何在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')