在MATLAB中用alpha值绘制圆圈

Ale*_*lex 6 matlab

我创建了一些数据的散点图,因为你做的,我有一些我想绘制为圆一些的α值重复的数据点,以便在同一位置打桩的加分是显而易见的.

据我所知,你无法设置你生成的小圆圈的alpha属性plot(x, y, 'o'),所以我使用patch()自己绘制了数千个小圆圈:

x = repmat([1:10], [1 10]);
y = round(10*rand(100, 1))/10;
xlim([0 11])
ylim([0 1])
p = ag_plot_little_circles(x', y, 10, [1 0 .4], 0.2);

function p = ag_plot_little_circles(x, y, circle, col, alpha)
%AG_PLOT_LITTLE_CIRCLES Plot circular circles of relative size circle
% Returns handles to all patches plotted

    % aspect is width / height
    fPos = get(gcf, 'Position');
    % need width, height in data values
    xl = xlim();
    yl = ylim();
    w = circle*(xl(2)-xl(1))/fPos(3);
    h = circle*(yl(2)-yl(1))/fPos(4);

    theta = 0:pi/5:2*pi;
    mx = w*sin(theta);
    my = h*cos(theta);
    num = 0;
    for k = 1:max(size(x))
        for f = 1:size(y,2)
            num = num+1;
            p(num) = patch(x(k)+mx, y(k,f)+my, col, 'FaceColor', col, 'FaceAlpha', alpha, 'EdgeColor', 'none');
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这不是最佳的,因为我需要知道并设置绘图的大小(xlimylim),然后绘制它以使圆圈最终成为圆形.如果我重新塑造情节,那么它们最终会成为椭圆形.我最终还有数以百万计的物品,这在传说中是一种痛苦.

有没有更简单的方法?

Jea*_*ves 5

我发现无法在MATLAB 中使用带有 alpha 的线标记。

如果您查看线属性(绘图后面的(中)低级函数),您将看到您可以定义标记,并且它们的唯一属性是它们的颜色(MarkerEdgeColorMarkerFaceColor),它不带任何 alpha(没有MarkerFaceAlpha属性) .

所以你如何使用补丁来做这件事似乎是要走的路。

我唯一可以建议避免拥有无数对象的方法是将它们分组在hggroup 中,这将使它们在图例中显示为单个对象。


Pau*_*aul 2

patchline在 Matlab Exchange 上找到了可以接受任何patch参数的函数,包括'FaceAlpha'

http://www.mathworks.com/matlabcentral/fileexchange/36953-patchline/content/patchline.m