Matlab画柱状图和折线图的暗黑技巧

  Matlab有很强的绘图功能,其基本的用法参阅帮助文档已经足矣。但是对于一些定制性的功能,在帮助文档中未必能很容易查到,或者说是隐(暗)藏(黑)技巧。我们首先来看看在绘制barplot( 柱状图 )时,可能会不知所措的一些麻烦,我们主要通过一段示例代码来实现下面四个功能(其中加标签的方法是比较tricky的),最终绘制出来的效果图如下图所示。

1)为柱状图中的每个条柱设置不同的颜色(用于表示不同的类别),并附上图例;

2)将每个条柱所表示数值以标签的形式添加到柱上,并将文字方向设置为垂直;

3)其他设置横坐标和纵坐标的的技巧;

4)设置图表背景为白色;

5)注意字符串连接的方法。


       单独实现上述功能的方法其实有很多,但是将所有功能同时实现的方法却相当困难,主要是很多任务比较难全自动实现(人工编码介入的成分较大)。我们给出一个参考程序如下: copy

  1. figure1 = figure('Color',[1 1 1]);  
  2.   
  3. p1X = [1]; p1Y = [0.067];  
  4. p2X = [2]; p2Y = [0.177];  
  5. p3X = [3]; p3Y = [0.067];  
  6. p4X = [4]; p4Y = [0.096];  
  7.   
  8. p1 = bar(p1X,p1Y);  
  9. hold on;  
  10. p2 = bar(p2X,p2Y);  
  11. hold on;  
  12. p3 = bar(p3X,p3Y);  
  13. hold on;  
  14. p4 = bar(p4X,p4Y);  
  15.   
  16. % 设置各个柱状图的颜色  
  17.   
  18. set(p1,'FaceColor','red');  
  19. set(p2,'FaceColor','blue');  
  20. set(p3,'FaceColor','m');  
  21. set(p4,'FaceColor','g');  
  22.   
  23. % 在柱状图上显示数值(文字方向为垂直)  
  24.   
  25. txt1 = text(p1X, p1Y+0.01, strcat(num2str(p1Y*100),'%'), 'rotation', 90);  
  26. txt2 = text(p2X, p2Y+0.01, strcat(num2str(p2Y*100),'%'), 'rotation', 90);  
  27. txt3 = text(p3X, p3Y+0.01, strcat(num2str(p3Y*100),'%'), 'rotation', 90);  
  28. txt4 = text(p4X, p4Y+0.01, strcat(num2str(p4Y*100),'%'), 'rotation', 90);  
  29. set(txt1, 'fontsize', 20);  
  30. set(txt2, 'fontsize', 20);  
  31. set(txt3, 'fontsize', 20);  
  32. set(txt4, 'fontsize', 20);  
  33.   
  34. ylim([0, 0.24]);  
  35.   
  36. ylabel( 'RR' );  
  37. set(gca,'XTickLabel',{})  
  38. set(gca,'fontsize',24);  
  39.   
  40. set(gca, 'YTick',[0, 0.04, 0.08, 0.12, 0.16, 0.20, 0.24])  
  41. set(gca, 'YTicklabel',{'0%','4%','8%','12%', '16%','20%','24%'});  
  42.   
  43. % 画图例  
  44. legend1=legend('RF-MinVar','MaxDom','MinVar','Area-Greedy', 'location','northeast');  
  45. set(legend1,'FontSize',20);  
  46. set(legend1,'box','off');  

下面我们来讨论利用Matlab绘制折线图的一些技巧,主要包括:

1)设置折线中Marker的形式和大小,折线的线形和粗细;

2)设置横纵坐标的标签(注意为了写出幂次,我们使用了TeX语法);

3)设置横纵坐标的取值范围;

4)设置图例的形式及位置等;

5)注意Matlab中的续行符号是 “...”。 copy

  1. k_st = 10:3:34;  
  2.   
  3. max_ces_st = [0.251014, 0.251014, 0.089194, 0.089194, ...  
  4. 0.089194, 0.089194, 0.089194, 0.000014, 0.000014];  
  5.   
  6. min_ces_st = [0.002519, 0.002519, 0.002519, 0.002519, ...  
  7. 0.001307, 0.001307, 0.001307, 0.001307, 0.001307];  
  8.   
  9. rf_ces_st = [0.002519, 0.001307, 0.001307, 0.001307, ...  
  10. 0.001062, 0.001062, 0.001062, 0.000001, 0.000001];  
  11.   
  12. area_ces_st = [0.010109, 0.010109, 0.010109, 0.010109, 0.010109, ...  
  13. 0.008745, 0.008745, 0.006179, 0.001982];  
  14.   
  15. figure1=figure('Color',[1 1 1]);  
  16.   
  17. semilogy(k_st, rf_ces_st, 'r-o', ...  
  18.     k_st, min_ces_st, 'b-v', ...  
  19.     k_st, max_ces_st,'g-*', ...  
  20.     k_st, area_ces_st,'m-+','Markersize', 24,'linewidth',2);  
  21.   
  22. xlabel('k','FontSize',36);  
  23. ylabel('RR','FontSize',36);  
  24. xlim([10, 34]);  
  25. ylim([1e-6, 1]);  
  26. set(gca,'fontsize',30);  
  27.   
  28. set(gca, 'XTick',[10,13,16,19,22,25,28,31,34]);  
  29. set(gca, 'YTick',[1e-6,1e-4,1e-2,1]);  
  30. set(gca, 'XTicklabel',{'10','13','16','19','22','25','28', '31','34'});  
  31. set(gca, 'YTicklabel',{'0^{ }','10^{-4}','10^{-2}', '10^{0}'});  
  32.   
  33. legend1=legend('RF-MinVar','MinVar','MaxDom','Area-Greedy', 'location','southwest');  
  34. set(legend1,'FontSize',24);  
  35. set(legend1,'box','off');  
执行上述代码之后的结果如下:

相关文章
相关标签/搜索