案例:之前跑過的程序 已經生成了多個matlab圖,現在需要進行合並到一個圖中。
解決方案,利用圖像句柄把figure圖像中的參數讀入到內存中,然后重新subplot繪制。
程序如下:
- clc;clear;
- open(‘./test_1.fig’)
- figure_info=findall(gcf,’type’,'line’);
- xdata1 = get(figure_info,’xdata’);
- ydata1 = get(figure_info,’ydata’);
- color1 = get(figure_info,’color’);
- subNum1 = length(xdata1);
- open(‘./test_2.fig’)
- figure_info=findall(gcf,’type’,'line’);
- xdata2 = get(figure_info,’xdata’);
- ydata2 = get(figure_info,’ydata’);
- color2 = get(figure_info,’color’);
- subNum2 = length(xdata2);
- open(‘./test_3.fig’)
- figure_info=findall(gcf,’type’,'line’);
- xdata3 = get(figure_info,’xdata’);
- ydata3 = get(figure_info,’ydata’);
- color3 = get(figure_info,’color’);
- subNum3 = length(xdata3);
- open(‘./test_4.fig’)
- figure_info=findall(gcf,’type’,'line’);
- xdata4 = get(figure_info,’xdata’);
- ydata4 = get(figure_info,’ydata’);
- color4 = get(figure_info,’color’);
- subNum4 = length(xdata4);
- %%
- subplot(2,2,1)
- for i=subNum1:-1:1
- if length(xdata1{i})==1
- break;
- end
- plot(xdata1{i},ydata1{i},‘.’,’color’,color1{i})
- hold on;
- end
- title(‘(a). K-means (TF-IDF)’)
- set(gca,’xtick’,[]);
- set(gca,’ytick’,[]);
- % box off;
- % axis off;
- subplot(2,2,2)
- for i=subNum2:-1:1
- if length(xdata2{i})==1
- break;
- end
- plot(xdata2{i},ydata2{i},‘.’,’color’,color2{i})
- hold on;
- end
- title(‘(b). Spectral Clustering (best)’)
- set(gca,’xtick’,[]);
- set(gca,’ytick’,[]);
- % box off;
- % axis off;
- subplot(2,2,3)
- for i=subNum3:-1:1
- if length(xdata3{i})==1
- break;
- end
- plot(xdata3{i},ydata3{i},‘.’,’color’,color3{i})
- hold on;
- end
- title(‘(c). Average Embedding (TF)’)
- set(gca,’xtick’,[]);
- set(gca,’ytick’,[]);
- % box off;
- % axis off;
- subplot(2,2,4)
- for i=subNum4:-1:1
- if length(xdata4{i})==1
- break;
- end
- lineH(subNum4-i+1) = plot(xdata4{i},ydata4{i},‘.’,’color’,color4{i});
- hold on;
- end
- title(‘(d). STCC’)
- set(gca,’xtick’,[]);
- set(gca,’ytick’,[]);
- % box off;
- % axis off;
- hL=legend(lineH,{’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′});
- newPosition = [0.4 0.4 0.2 0.2];
- newUnits = ’normalized’;
- set(hL,’Position’, newPosition,’Units’, newUnits);
合並成單幅圖像之后要做的另外一件美觀的事情就是調整間距了。。。
可參考http://blog.sina.com.cn/s/blog_7e18707801017pin.html,具體操作如下:
1. 代碼實現:
figure(‘Name’,'默認’);
subplot(2,2,1);
subplot(2,2,2);
subplot(2,2,3);
subplot(2,2,4);
figure(‘Name’,'緊湊’);
subplot(‘Position’,[0.02 0.65 0.3 0.3]);
subplot(‘Position’,[0.35 0.65 0.3 0.3]);
subplot(‘Position’,[0.02 0.3 0.3 0.3]);
subplot(‘Position’,[0.35 0.3 0.3 0.3]);
subplot(‘Position’,[left bottom width height]) creates an axes at the position specified by a four-element vector. left, bottom, width, and height are in normalized coordinates in the range from 0.0 to 1.
在由四個歸一化坐標規定的位置上建立坐標軸。
src: http://www.ilovematlab.cn/forum.php?mod=viewthread&action=printable&tid=93345
2. 手動調整:
在圖上的工具欄中點Tools,Align Distribute Tool,自己設定間距。
注意:1)需要先選中兩幅圖片,再調整間距;2)一定要用‘shift+click’選中待調整的兩幅圖片,不可以直接點
其實方式1 是一種非常贊的 版面設計方法,為了能夠更加清楚明了的理解 那四個參數,[left,bottom,width,height]是什么意思,我畫了一張圖給大家,應該可以一目了然:
其中,第一幅圖的參數為[0.02, 0.65, 0.3, 0.3]
from: http://jacoxu.com/?p=1595