在MATLAB中使用圆柱体上的点密度为圆柱体着色

在MATLAB中使用圆柱体上的点密度为圆柱体着色,matlab,colors,plot,Matlab,Colors,Plot,我在MATLAB中有一个绘图,目前只是一个圆柱体。我还有一大组数据点,来自于这个圆柱体上的一个实验。我想根据这些点的密度给圆柱体上色,即高密度为深红色,低密度为淡蓝色。我不确定最好的方法是什么。目前,我分别为圆柱体绘制点和网格。这些点的间距不是均匀的 rad = linspace( 0, 1, 100 ) ; theta = linspace( 0, 2 * pi, 100 ) ; [r, th] = meshgrid( rad, theta ) ; x = 190 * cos( t

我在MATLAB中有一个绘图,目前只是一个圆柱体。我还有一大组数据点,来自于这个圆柱体上的一个实验。我想根据这些点的密度给圆柱体上色,即高密度为深红色,低密度为淡蓝色。我不确定最好的方法是什么。目前,我分别为圆柱体绘制点和网格。这些点的间距不是均匀的

rad = linspace( 0, 1, 100 )  ; 
theta = linspace( 0, 2 * pi, 100 ) ; 

[r, th] = meshgrid( rad, theta ) ; 

x = 190 * cos( th ) ; 
y = 115 * sin( th ) ;  

z = 1730 * r ; 

mesh( x, y, z ) 
hold on

x = [35.12 -44.44 24.98 -17.05 152.52 109.28 -181.85 -72.26 84.45 -89.96 55.02 70.88 172.08 -144.16 44.24 28.81 -30.14 72.79 -126.75 -37.22]

y = [-113.01 -111.80 -114.00 -114.53 -68.57 -94.07 -33.31 -106.35 -103.01 -101.28 -110.07 -106.69 -48.74 -74.90 -111.83 -113.66 -113.54 -106.22 -85.66 -112.71]

z = [1650.59 767.18 845.06 311.28 1352.75 921.70 1111.35 1572.80 1231.16 89.67 891.30 551.67 547.92 983.57 1746.61 1346.11 810.22 465.33 1564.76 1624.73]

scatter3( x, y, z )
下面是我试图实现的一个图示示例:


这里有点棘手

让我们首先估计圆柱体表面上点的密度,将其三维坐标转换为二维坐标,因为它们位于三维空间中的二维曲面上

xx = [35.12 -44.44 24.98 -17.05 152.52 109.28 -181.85 -72.26 84.45 -89.96 55.02 70.88 172.08 -144.16 44.24 28.81 -30.14 72.79 -126.75 -37.22];
yy = [-113.01 -111.80 -114.00 -114.53 -68.57 -94.07 -33.31 -106.35 -103.01 -101.28 -110.07 -106.69 -48.74 -74.90 -111.83 -113.66 -113.54 -106.22 -85.66 -112.71];
zz = [1650.59 767.18 845.06 311.28 1352.75 921.70 1111.35 1572.80 1231.16 89.67 891.30 551.67 547.92 983.57 1746.61 1346.11 810.22 465.33 1564.76 1624.73];

tt = atan2( yy./115, xx./190 ); %// angle in range [-pi pi]
tt( tt<0 ) = tt( tt<0 ) + 2*pi; %// in range [0..2*pi] for compatibility with definition of `theta`.
%//compute density using hist3
[n c] = hist3( [tt;zz]' ); %'// you can play with the granularity here...
现在我们可以使用密度来给圆柱体上色

mesh( x, y, z, d );
导致

这是一个有趣的问题,但事实上,这是一条通向广泛的道路。请添加一些重要的代码和示例数据。考虑使用n维直方图:@ NataN,如果点位于圆柱表面上,二维柱状图SeC3应用于圆柱坐标应该足够了。@泰勒,你能提供你的数据集吗?问题中的数据集不够大,无法进行密度估计,而且点似乎不在圆柱体表面上。…。@a.Donda,我无法提供整个数据集。我提供的点确实位于绘制的圆柱体表面上。它没有相等的x轴和y轴,所以我认为我不能使用matlab提供的圆柱体对象。这正是正确的方法imho–除了,我在调用hist3时指定了bin边,而不是外推,这样它们就覆盖了整个间隔[0,2pi]。@A.Donda谢谢。正如我在代码中所评论的,hist3是调整表示的粒度和准确性的地方。我只是在这里提出了一个提纲。。。但你是对的,外推是需要注意和仔细规划的事情。
mesh( x, y, z, d );