1. 为什么科研绘图需要纹理填充柱状图在撰写科研论文或技术报告时我们经常需要对比多组数据。传统纯色柱状图有个致命缺陷当数据组超过5组时即使使用不同颜色读者也很难快速区分各个柱子的归属。这个问题在以下场景尤为突出论文被黑白打印时所有彩色柱状图都会变成灰度图不同颜色的柱子可能变成相近的灰色读者是色盲或色弱人群时某些颜色组合会完全无法区分期刊要求使用特定配色方案时可能限制颜色选择自由我去年投稿的一篇论文就遇到了审稿人的灵魂拷问Figure 3中6组数据的柱状图难以区分请改进。当时试了各种颜色组合都不理想直到发现了hatchfill2这个神器。它能在保持基础颜色的同时为每个柱子添加独特的纹理图案相当于给数据上了双重保险。2. 准备工作获取hatchfill2工具包2.1 工具包安装指南hatchfill2是Kesh Ikuma开发的Matlab第三方工具最新版本在Matlab Central文件交换平台可以找到。安装只需三步访问MathWorks官网文件交换区搜索hatchfill2并下载压缩包将解压后的文件夹添加到Matlab路径% 添加路径示例假设解压到D盘 addpath(D:\hatchfill2); savepath; % 永久保存路径设置注意老版本的hatchfill存在一些兼容性问题建议一定要用2023年更新的hatchfill22.2 基础绘图环境配置先准备一个标准的柱状图作为纹理填充的基础。这里我用模拟的实验数据演示% 生成示例数据 x 1:5; % 5个样本 dataset [rand(5,1)*0.5, rand(5,1)*0.8, rand(5,1)]; % 3组数据 % 绘制基础柱状图 figure(Color,w,Position,[100,100,600,400]); GO bar(x, dataset, 1, EdgeColor,k,LineWidth,1);3. 纹理填充的核心技巧3.1 基本纹理参数详解hatchfill2的核心语法是hatchfill2(图形对象, 纹理类型, 参数1,值1, 参数2,值2,...)最重要的三个参数组合纹理方向HatchAngle控制线条角度0度→水平线45度→右斜线-45度→左斜线90度→垂直线纹理密度HatchDensity控制线条疏密建议值20-50数值越大线条越密纹理颜色HatchColor控制线条颜色通常设为黑色(k)也可与柱体颜色形成对比3.2 实战案例四组数据清晰区分假设我们要对比四组实验结果的RMSE值% 定义四组纹理 hatchfill2(GO(1), cross, HatchAngle,45, HatchDensity,40, HatchColor,k); hatchfill2(GO(2), single, HatchAngle,45, HatchDensity,40, HatchColor,k); hatchfill2(GO(3), single, HatchAngle,0, HatchDensity,40, HatchColor,k); hatchfill2(GO(4), single, HatchAngle,-45, HatchDensity,40, HatchColor,k); % 设置颜色 map TheColor(sci,2064,map,10); GO(1).FaceColor map(1,1:3); GO(2).FaceColor map(2,1:3); GO(3).FaceColor map(3,1:3); GO(4).FaceColor map(6,1:3);这样得到的柱状图第一组红色交叉网格第二组绿色右斜线第三组蓝色水平线第四组紫色左斜线即使打印成黑白也能通过纹理方向清晰区分。4. 高级美化技巧4.1 期刊级图表优化要让图表达到期刊出版要求还需要优化这些细节% 字体和线条设置 set(gca, FontName, Arial, FontSize, 11, LineWidth, 1.2); % 坐标轴标签 hXLabel xlabel(Experimental Conditions, FontWeight,bold); hYLabel ylabel(RMSE (m), FontWeight,bold); % 图例设置 legend({Method A,Method B,Method C,Proposed},... Box,off,Location,northwest); % 导出设置 exportgraphics(gcf, bar_texture.tif, Resolution, 600,... BackgroundColor,none);4.2 特殊场景解决方案场景1纯黑白印刷% 将所有柱子设为白色 set(GO, FaceColor, w); % 保持纹理黑色场景2色盲友好模式% 使用色盲安全色 colors [0,0,0; 0.9,0.6,0; 0.35,0.7,0.9]; % 配合不同纹理 hatch_types {single,cross,dot};5. 常见问题排查问题1纹理显示不全原因图形窗口DPI设置过低解决导出时分辨率设为≥300dpi问题2纹理错位原因图形窗口被缩放解决导出前固定窗口大小问题3填充区域有白边原因Matlab渲染问题解决使用exportgraphics替代print我在实际使用中发现有时候纹理在屏幕上显示正常但导出后会出现错位。这时可以尝试先放大图形窗口再执行导出操作。另一个小技巧是对于特别密集的纹理适当降低HatchDensity值比如从40降到30往往能获得更好的打印效果。