Matlab区域图:调整框样式和刻度线

时间:2015-03-15 16:54:57

标签: matlab plot

我正在尝试使用'area'函数使用plotyy创建2 y轴的区域图。我不想要任何刻度线或标签或标题,但我只想要外面的盒子。我还想将图(不是整个图窗口)保存为png文件。

当我关闭x和y轴刻度和标签时,盒子在底部和左侧看起来很薄,在顶部和右侧看起来很厚。我做错了什么?

另外,如果我尝试使“LineWidth”框变胖,我会在左下角和右下角看到两个刻度线 - 这会破坏情节,我无法删除。有人可以帮忙吗?

我的测试代码如下:

x = 1:100;
y1 = rand(size(x));
y2 = 100*rand(size(x));

fig_handle = figure('units','inches','position',[1 1 9 3]);
[a,p1,p2] = plotyy(x,y1,x,y2,'area');

c1 = get(p1,'child');
c2 = get(p2,'child');

set(c1,'facea',0.5,'FaceColor','b','EdgeColor',[0 0 0]);
set(c2,'facea',0.5,'FaceColor','r','EdgeColor',[0 0 0]);
set(c1,'Line','None');
set(c2,'Line','None');

set(a,'Layer','top')
set(a,'XTick',[]);
set(a(1),'YTick',[]);
set(a(2),'YTick',[]);
set(a,'TickDir','in')
set(a,'LineWidth',5);

另外,请注意左Y轴在上有红色区域,而右侧Y轴没有。这可修复吗?

任何帮助将不胜感激!另外,我是StackOverflow的新手 - 所以,如果这些帖子中的问题太多,请原谅我,我会将它们作为单独的请求/问题发布。

1 个答案:

答案 0 :(得分:1)

以下是左侧Y轴出现红色的解决方法。

由于轴线非常粗,所以靠近它的数据被绘制在它上面。为避免这种情况,您可以稍微移动轴的x限制,以便为数据腾出更多空间。通过更改任一轴的XLim属性来实现此目的,因为它们共享相同的x限制:

XL = get(a,'Xlim');

xl = XL{1}; %// here XL{1} and XL{2} are the same...[1 100]
set(a(:),'Xlim',[xl(1)-.5 xl(2)+.5])

至于情节底部令人讨厌的刻度线,我必须说我不知道​​如何在保持轴可见的同时将它们移除。

作为plotyy的替代解决方案,这是一种在没有plotyy的情况下获得良好结果的方法(我认为)。诀窍是叠加2个轴并使它们都不可见,然后将图形颜色设置为白色并在图形周围添加黑色矩形。

以下是代码:

clear
clc
close all

x = 1:100;
y1 = rand(size(x));
y2 = 100*rand(size(x));

H1 = area(x,y1);

%// Set the figure color to white
set(gcf,'Color','w')


%// Plot data and set different properties for each axes
A1 = gca;
A2 = axes('Position',get(A1,'Position'));

H2 = area(x,y2);

set(A2,'YAxisLocation','right','Color','none','XTickLabel',[]);
set(A2,'XLim',get(A1,'XLim'),'XTick',[],'YTick',[]);

set(A1,'XTick',[],'YTick',[]);

%// Make both axes not visible.
set(A2,'Visible','off')
set(A1,'Visible','off')

axes(A1)

%// Get axes limits
XL = get(gca,'XLim');
YL= get(gca,'YLim');

%// Create rectangle as a bounding box
rectangle('Position',[XL(1) YL(1) XL(2)-1 YL(2)],'LineWidth',5)


%//===
%// Change the data color/properties
hP = findobj('Type','patch');

set(hP(1),'FaceColor','b','FaceAlpha',.5,'EdgeColor',[0 0 0],'line','none')
set(hP(2),'FaceColor','r','FaceAlpha',.5,'EdgeColor',[0 0 0],'line','none')

输出:

enter image description here

它并不完美,但希望有所帮助!