2010-07-14 126 views
4

在MATLAB中,是否可以创建一个包含两个相关数据源的单个图,其中第一个源绘制在x轴的底部,第二个绘制源从顶部绘制的X轴?Matlab,在一张图中绘制两个数据序列

我在MATLAB文档中找不到任何地方。

最后图形我需要的是这样一种形式:

http://www.epa.gov/ncer/progress/images/R827933C033_02_003.gif

回答

6

我试图复制你的图形尽可能接近。这是我结束了:

t = linspace(datenum('01-19-2002'), datenum('06-27-2002'), 12); 
x1 = randi(40, [12 1]); 
x2 = randi(40, [12 1]); 
z = 100-x1-x2; 

hAxR = axes(); 
hAxL = axes(); 

h = bar(t, [x1 z x2], 'stacked'); 

set(h(1),'facecolor','y') 
set(h(2),'facecolor',[.8 .8 .8]) 
set(h(3),'facecolor','r') 
legend(h, {'s1' 's2' 's3'}, ... 
    'orientation','horizontal', 'location','northoutside') 

set(hAxL, 'xtick',t, 'xlim',[datenum('01-01-2002') datenum('07-15-2002')]) 
datetick(hAxL, 'x',2,'keepticks','keeplimits') 
xticklabel_rotate 

ylabel(hAxL, 'label1') 
ylabel(hAxR, 'label2') 

set(hAxR, 'position',get(hAxL,'position'), 'color','none', 'xtick',[], ... 
    'ydir','reverse', 'yaxislocation','right', 'ylim',get(hAxL,'ylim')) 
set(hAxL, 'YGrid','on') 

graph

我使用XTICKLABEL_ROTATE旋转在x轴

+1

Gah!打败我5分钟!请注意,通过http://www.mathworks.com/matlabcentral/fileexchange/18826-hatch-fill-patterns-plus-plus,您可以对条形进行交叉阴影填充。另外,你可能想用真实的东西来替换'label1'和'label2'。 +1为完美的解决方案。 – Jonas 2010-07-14 02:43:01

+0

@Jonas:谢谢,我只是在FEX上查找了关于孵化模式的提交,颜色为 – Amro 2010-07-14 02:47:23

+0

我刚刚注意到你只绘制了一个酒吧系列。鉴于问题的标题,我认为OP希望有一种带有两种颜色的堆叠酒吧系列,以及一款带有剖面线图案的酒吧系列。因此,你需要运行'hBL = bar(hAxL,data1); hBR = bar(hAxR,data2)'。 – Jonas 2010-07-14 03:00:17

0

退房的bar函数的文档。你可以用它来像下面创建图表:

bar2.gif

bar_ex2.gif

+1

为什么-1的标签?这不是一个完整的解决方案,但它应该让OP走上正确的轨道。 – Doresoom 2010-07-14 14:51:09