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時可能要同時使用線型區分,或考慮其他方法。