如何在matlab中绘制多边形时将edgecolor设置为与facecolor相同?

时间:2014-06-27 13:55:37

标签: matlab matlab-figure polygons

我正在使用命令fill绘制许多多边形。

fill(X1,Y1,1)
fill(X2,Y2,2)
...

我想将边缘颜色设置为与面部颜色相同。我该怎么做?

我正在绘制许多多边形,我需要找到一种方法来将edgecolor设置为与facecolor相同。即使是脸色也不为我所知。

我必须使用数字,因为我正在绘制数据。

2 个答案:

答案 0 :(得分:1)

只需设置EdgeColor属性/值对,颜色与faces相同:

t = (1/16:1/8:1)'*2*pi;
x = sin(t);
y = cos(t);
fill(x, y, 'r', 'EdgeColor', 'r');

在for循环中使用不同颜色绘制多个多边形的示例代码(使用当前色彩映射)

function [] = foo()
%[
    cmap = colormap; % Use some colormap to have different color for polygons
    ccount = size(cmap, 1); % Number of elements in the colormap

    figure; % Create a figure
    hold on; % Avoids deleting previous polygons

    pcount = 50; % number of polygons
    for i = 1:pcount,

        % Create randomly translated polygon
        t = (1/16:1/8:1)'*2*pi;
        x = 0.1*sin(t) + rand;
        y = 0.1*cos(t) + rand;

        % Select a color in the colormap
        colorIndex = mod(i, ccount);
        if (colorIndex == 0), colorIndex = ccount; end       
        colorValue = cmap(colorIndex, :);

        % Draw the polygon
        fill(x, y, colorValue, 'EdgeColor', colorValue);

    end
%]
end

答案 1 :(得分:1)

我不明白CitizenInsane的建议有什么问题,但如果您只是想保存一些代码,可以使用一些辅助功能:

FillItLikeIWant = @(x,y,color) fill(x, y, color, 'EdgeColor',color)

FillItLikeIWant(x,y,'r')

或者,您可以定义所有"样式"提前,这就是我通常用线条图来做到这一点,如下所示:

myStyles = {{'r','EdgeColor','r'};
            {'b','EdgeColor','b'};
            {'g','EdgeColor','g'}}

然后遍历样式:

for ii = 1:3
    fill(x,y,myStyles{ii}{:}); hold on
end

修改

我不知道您的示例fill(X1,Y1,1)中的单个数字 1 2 应该是什么,但也许您想要创建并使用这样的色彩映射:

N = 500;
Cmap = colormap(jet(N));

现在使用辅助函数,每个多边形都会获得Cmap的另一种颜色。

for ii = 1:500
    h{ii} = FillItLikeIWant(x,y,Cmap(ii,:));
end

您可以仅通过索引跟踪所有颜色。或者保存每个多边形的句柄。 所以之后你可以通过它的句柄获得多边形的颜色:

get(h{500},'FaceColor')

ans =

        0.504            0            0

与:

相同
Cmap(500,:)

ans =

        0.504            0            0