1.多变量绘图
由于在matlab绘图时遇到多个变量,需要逐一绘制(还没找到别的好方法),在此过程中使用hold on保持图形,比较繁琐,所以将其封装成为以下函数,简化该过程。目的是以更接近统计学的思维去绘图,当然还十分粗糙,和ggplot2没得比,不过出发点是向着它努力的。
函数如下:
function mulplot(data,nums,p,legfun) %data:待绘图的数据,每列一个变量 %nums:绘图所用数据所在列1×3,依次为颜色、横坐标、纵坐标 %p:绘制类型,'l'代表线条,'p'代表散点 %legfun:一个函数,用于修饰图例 u=unique(data(:,nums(1))); for i=1:length(u) subdata=data(data(:,nums(1))==u(i),:); if p=='l' plot(subdata(:,nums(2)),subdata(:,nums(3))); elseif p=='p' scatter(subdata(:,nums(2)),subdata(:,nums(3))); end hold on; end hold off; leg=num2cell(string(u)); for i=1:length(u) leg{i}=legfun(leg{i}); end legend(leg); end
测试如下:
n=5; a=1:n; x=repmat(a,1,n); y=repelem(a,1,n); z=x./(y+1); data=[x',y',z']; legfun=@(x) strcat("x=",x); mulplot(data,[1,2,3],'l',legfun); xlabel('y');ylabel('z');
得到图像如下:
2.色盲友好色函数
之前在这里提到了色盲友好色:https://www.cnblogs.com/dingdangsunny/p/15305232.html#_label2
但是我们虽然知道了这些颜色的RGB,每次用起来还是不方便,总要手动操作一番,所以写成函数,方便使用。
函数:
%blind.m将当前图窗的绘图色序设置为色盲友好色 blind_friendly = [0,114,178; 230,159,0; 240,228,66; 204,121,167; 0,158,115; 86,180,233; 213,94,0]/255; colororder(blind_friendly);
直接还是使用上面的案例,在末尾加上一句即可。
测试:
n=5; a=1:n; x=repmat(a,1,n); y=repelem(a,1,n); z=x./(y+1); data=[x',y',z']; legfun=@(x) strcat("x=",x); mulplot(data,[1,2,3],'l',legfun); xlabel('y');ylabel('z'); blind;
效果:
对比可以发现其差异,使用简便,颜色已被替换为友好色。但是这只适用于线条数量小于等于7的情况,当数量大于7时可能要同时使用线型区分,或考虑其他方法。