matlab多變量繪圖函數(類似ggplot2)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章