作者physmd (smd)
看板MATLAB
标题[绘图] scatter3()
时间Tue Mar 12 20:46:41 2013
各位版友,我遇到一个奇怪的状况,没有办法正确指定资料点的大小,请多指教啦
(不好意思我用的好像不是正版的,不知道有没有关连 :P)
照理讲 scatter3(x,y,z,s,c) 中使用一个 s 向量跟 x~z 长度一样,可以指定
每一个点的大小。(c 可以point-wise指定颜色)
看 Help 里面说 s 是直接指定绝对大小(number of points)。
当只有 100 或 200 个点的时候没问题(大的点比小的点大很多),问题是当
资料点稍微多一点的时候,譬如说到1000,点的尺寸就完全不一样了(大的点跟
小的点几乎一样大)。
明明1000根本还很小的说....
彷佛因为绘图相关的记忆体的限制,数据点的比较多的时候就不能画太大,不然图
上有颜色的点(pixel)就会太多。
我可以(应该说必须)譬如说把向量 s 乘以十 来再次画出大小有落差的尺寸。
这样子要抓大小真的很难耶。
底下是我的程式码。
更奇怪的是,如果把数据加上一些随机项,就会整个乱掉...我希望按照 x 座标,
小的点在「左边」,但是完全不对,很小的点跟很大的点都排在一起。
我使用同样的向量来画颜色 scatter3(x,y,z,s,s),所以可以对照看出 s 是没有
问题的(我的程式码里面的确会让「尾巴」的部分有一点点重复,但那不是问题)
到底是怎麽回事呢? @@
谢谢~
% =================== helix ======================
w(:, 1) = 0:1/m:1;
turn = [2 3];
w(:, 2) = cos( turn(1) * 2*pi * w(:, 1));
w(:, 3) = sin( turn(2) * 2*pi * w(:, 1));
figure;
scatter3( w(:, 1), w(:, 2), w(:, 3), ...
40 + 400 * w(:, 1) .* w(:, 1) , ...
w(:, 1), 'filled' ... % un-filled is quite funny :P
); axis square; colormap('default');
mn = min( min(w) ); mx = max( max(w)); rng = mx - mn;
xlim([-0.2 mx + 0.1*rng ]); xlabel('x');
ylim([mn - 0.1*rng mx + 0.1*rng ]); ylabel('y');
zlim([mn - 0.1*rng mx + 0.1*rng ]); zlabel('z');
% ============= helix with perturbed ======================
m = 8*10^2;
w(:, 1) = rand(m, 1);
turn = [2, 3];
w(:, 2) = cos( turn(1) * 2*pi * w(:, 1));
w(:, 3) = sin( turn(2) * 2*pi * w(:, 1));
scale = 10 * repmat([3 2 1], m, 1); % stretch
w = w .* scale; % still not tilted, though
pscale = 0.1 * repmat([7 3 1], m, 1); % scale of noise
w = w + pscale .* randn(m ,3); % perturb
% Do this before centering
PointSizes = w(:, 1) .* w(:, 1);
w = w - repmat( mean(w), m, 1);
figure;
scatter3( w(:, 1), w(:, 2), w(:, 3), ...
100 + PointSizes/2, ...
PointSizes, 'filled' ... % un-filled is quite funny :P
); axis square;
cmap = 0.7 * bone; % scaled to avoid light dots
colormap(cmap);
mn = min( min(w) ); mx = max( max(w)); rng = mx - mn;
xlim([mn - 0.1*rng mx + 0.1*rng ]); xlabel('x');
ylim([mn - 0.1*rng mx + 0.1*rng ]); ylabel('y');
zlim([mn - 0.1*rng mx + 0.1*rng ]); zlabel('z');
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 64.134.26.99