Matlab散射标记在图的边缘流血

时间:2016-09-19 17:18:41

标签: matlab plot matlab-figure

我注意到,对于散点图和其他类型的绘图(如条形图),标记通常会在绘图限制的边缘流血。这个问题附带的图片就是一个例子:你可以看到边界上的情节标记。这可以预防,如果是这样的话?

enter image description here

2 个答案:

答案 0 :(得分:3)

markers themselves are not affected by the axes Clipping property

  

只要数据点本身位于绘图的x和y轴限制范围内,剪切不会影响在每个数据点绘制的标记。 MATLAB显示整个标记,即使它略微超出轴的边界。

"解决方案"将在您的绘图周围添加少量填充,以使整个标记落在轴内。

以下将x和y范围填充1%

$0
rec | year | ing
----|------|-----
 1  | 2002 | a
 1  | 2002 | b
 1  | 2002 | c
 2  | 2002 | e
 .  |   .  | . 
 .  |   .  | . 
 3  | 2003 | a 

$1
rec | year | ing
----|------|-----
 5  | 2004 | a
 5  | 2004 | b
 4  | 2004 | c
 4  | 2005 | e
 .  |   .  | . 
 .  |   .  | . 
 6  | 2005 | a 

enter image description here

答案 1 :(得分:0)

这不是一个理想的方法,但我在轴范围之外的区域画了白色矩形。

我生成了类似的情节:

x=0:.02:1; plot(x,sin(2*pi*x),'o-')

然后,我使用以下代码:

xl = get(gca,'XLim');
yl = get(gca,'YLim');
set(gca,'clipping','off')
extremes = [xl(2)-xl(1), yl(2)-yl(1)];
rectangle('Position',[xl(1)-extremes(1), yl(2)            , 3*extremes(1),   extremes(2)],'FaceColor',[1 1 1],'EdgeColor','none'); % Top
rectangle('Position',[xl(1)-extremes(1), yl(1)-extremes(2), 3*extremes(1),   extremes(2)],'FaceColor',[1 1 1],'EdgeColor','none'); % Bottom
rectangle('Position',[xl(2)            , yl(1)-extremes(2),   extremes(1), 3*extremes(2)],'FaceColor',[1 1 1],'EdgeColor','none'); % Right
rectangle('Position',[xl(1)-extremes(1), yl(1)-extremes(2),   extremes(1), 3*extremes(2)],'FaceColor',[1 1 1],'EdgeColor','none'); % Left
set(gca,'XLim',xl);
set(gca,'YLim',yl);
set(gca,'box','on')
set(gca,'Layer','top')

此代码记录轴的现有范围,并在它们之外绘制矩形。绘制矩形后,轴的范围将恢复,轴将被拉到前面。

我任意填充extremes。如果图形的轴区域占据更小的部分,则可以使其更大;如果存在其他具有重叠风险的轴区域,则可以使其更小。

这是结束result