電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 125|回復(fù): 0
收起左側(cè)

MATLAB|交叉折線圖之間分色填充

[復(fù)制鏈接]

193

主題

193

帖子

1532

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
1532
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2023-11-26 15:33:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
點(diǎn)擊上方藍(lán)字和“好玩的MATLAB”一起快樂玩耍吧!

好玩的matlab
帶你解鎖不一樣的matlab新玩法

今天介紹一下交叉折現(xiàn)之間的分色填充,喜歡此推文的小伙伴們記得點(diǎn)贊+關(guān)注+分享!【尊重作者勞動(dòng)成果,轉(zhuǎn)載請注明推文鏈接和公眾號(hào)名】
效果圖



交叉折線圖之間分色填充概念介紹交叉折線圖之間的分色填充是一種高級(jí)數(shù)據(jù)可視化技巧,它涉及在兩條或多條在一定區(qū)間內(nèi)交叉或重疊的折線圖之間應(yīng)用不同的顏色填充。此技術(shù)主要用于圖形化地表示兩組或多組數(shù)據(jù)之間的比較和對(duì)比,特別是它們隨時(shí)間或其他變量的變化。應(yīng)用領(lǐng)域金融市場分析:展現(xiàn)不同金融工具或指數(shù)在時(shí)間序列中的表現(xiàn),突出市場波動(dòng)或趨勢。
生物醫(yī)學(xué)研究:比較不同治療方法或條件下的生物標(biāo)志物變化。
環(huán)境監(jiān)測:可視化不同環(huán)境因素(如溫度、濕度)隨時(shí)間的變化及其相互作用。
市場調(diào)研:對(duì)比不同消費(fèi)群體的購買習(xí)慣或品牌偏好隨時(shí)間的變化。
優(yōu)點(diǎn)增強(qiáng)數(shù)據(jù)解釋性:通過顏色差異,使得數(shù)據(jù)集間的比較更加直觀和易于理解。
強(qiáng)調(diào)數(shù)據(jù)動(dòng)態(tài):特別適用于展現(xiàn)數(shù)據(jù)隨時(shí)間或其他變量的動(dòng)態(tài)變化。
視覺吸引力:相比于傳統(tǒng)的折線圖,顏色填充增加了圖表的視覺吸引力,提高了觀眾的關(guān)注度。
缺點(diǎn)顏色選擇的重要性:不當(dāng)?shù)念伾x擇可能導(dǎo)致誤解或視覺混淆,特別是在色盲觀眾中。
數(shù)據(jù)解讀的準(zhǔn)確性:過度依賴顏色填充可能會(huì)忽視數(shù)據(jù)的其他重要方面,如統(tǒng)計(jì)顯著性。
圖表復(fù)雜性:過多的數(shù)據(jù)集或顏色可能使圖表過于復(fù)雜,難以解讀。
結(jié)論交叉折線圖之間的分色填充通過顏色的視覺對(duì)比強(qiáng)化了數(shù)據(jù)間的差異和關(guān)系。正確使用時(shí),它可以有效地傳達(dá)復(fù)雜信息,并幫助觀眾理解數(shù)據(jù)動(dòng)態(tài)。然而,為了保持圖表的有效性和易讀性,需要仔細(xì)考慮顏色選擇和圖表設(shè)計(jì)。
繪圖工具函數(shù)fillArea收藏、點(diǎn)贊=學(xué)會(huì)
  • function fillArea(x1, y1, x2, y2, fillColor1, fillColor2, alphaValue)%--------------------------------------------------------------------------% @Author: 好玩的Matlab && 豬豬% @公眾號(hào):好玩的Matlab% @Created: 09,18,2023% @Email: 2377389590@qq.com% 尊重勞動(dòng)成果,轉(zhuǎn)載請備注推文鏈接和公眾號(hào)名,嚴(yán)禁商用。%--------------------------------------------------------------------------plot(x1,y1,'color','none','HandleVisibility','off');plot(x2,y2,'color','none','HandleVisibility','off');% 調(diào)用函數(shù)x1 = x1(:); y1 = y1(:);x2 = x2(:); y2 = y2(:);% 查找交點(diǎn)[xi, yi] = polyxpoly(x1, y1, x2, y2);% 裁剪到共同的 x 軸范圍xRange = [max(min(x1), min(x2)), min(max(x1), max(x2))];yRange = [min(min(y1), min(y2)), max(max(y1), max(y2))];%邊界交叉點(diǎn)[xa1,ya1]=polyxpoly(x1, y1,[xRange(1),xRange(1)],yRange);[xb1,yb1]=polyxpoly(x1, y1,[xRange(2),xRange(2)],yRange);[xa2,ya2]=polyxpoly(x2, y2,[xRange(1),xRange(1)],yRange);[xb2,yb2]=polyxpoly(x2, y2,[xRange(2),xRange(2)],yRange);% 交叉點(diǎn)[x1,y1]=insertData(x1, y1, xi, yi);[x2,y2]=insertData(x2, y2, xi, yi);% 邊界點(diǎn)插入[x1, y1] = insertData(x1, y1, xa1, ya1);[x1, y1] = insertData(x1, y1, xb1, yb1);[x2, y2] = insertData(x2, y2, xa2, ya2);[x2, y2] = insertData(x2, y2, xb2, yb2);% 提取范圍數(shù)據(jù)xNew1 = x1(x1 >= xRange(1) & x1 2));yNew1 = y1(x1 >= xRange(1) & x1 2));xNew2 = x2(x2 >= xRange(1) & x2 2));yNew2 = y2(x2 >= xRange(1) & x2 2));[X1, Y1, X2, Y2] = equaLen(xNew1, yNew1, xNew2, yNew2);disp(char([20844 20247 21495 58 22909 29609 30340 77 97 116 108 97 98]))hold onfor i = 1:length(X1) - 1    % 確定填充顏色    if Y1(i) > Y2(i) || (Y1(i) == Y2(i) && Y1(i+1) > Y2(i+1))        color = fillColor1;    else        color = fillColor2;    end    % 填充    fill([X1(i) X1(i+1) X1(i+1) X1(i)], [Y1(i) Y1(i+1) Y2(i+1) Y2(i)], ...        color, 'EdgeColor', 'none', 'FaceAlpha', alphaValue, 'HandleVisibility', 'off');end    function [x1, y1, x2, y2] = equaLen(x1, y1, x2, y2)        % 確保兩個(gè)多邊形具有相同數(shù)量的點(diǎn)        % 同時(shí)保留原有的數(shù)據(jù)點(diǎn)        % 確定 x 的范圍和新的 x 網(wǎng)格        xMin = min(min(x1), min(x2));        xMax = max(max(x1), max(x2));        % 生成一個(gè)包含所有原始 x 值的合并且排序的數(shù)組        xAll = unique([x1; x2]);        % 如果合并后的 xAll 長度小于兩個(gè)數(shù)據(jù)集中最長的長度        % 則在 xAll 中插入額外的點(diǎn)以匹配最長的數(shù)據(jù)集長度        maxLength = max(length(x1), length(x2));        if length(xAll)             additionalPoints = linspace(xMin, xMax, maxLength - length(xAll) + 2);            xAll = unique([xAll; additionalPoints(:)]);        end        % 插值        y1 = interp1(x1, y1, xAll, 'linear', 'extrap');        y2 = interp1(x2, y2, xAll, 'linear', 'extrap');        % 更新 x1 和 x2        x1 = xAll;        x2 = xAll;    end    function [xUpdated, yUpdated] = insertData(xMain, yMain, xInsert, yInsert)        % 將 xInsert 和 yInsert 中的數(shù)據(jù)插入到 xMain 和 yMain 中        % 并確保結(jié)果是唯一的并且按照 x 的值排序        % 組合 xMain 和 xInsert        xCombined = [xMain; xInsert];        % 組合 yMain 和 yInsert        yCombined = [yMain; yInsert];        % 獲取唯一的 x 值及其索引,并保持排序        [xUnique, idxUnique] = unique(xCombined, 'sorted');        % 使用這些索引過濾 yCombined        yUnique = yCombined(idxUnique);        % 返回更新后的 x 和 y        xUpdated = xUnique;        yUpdated = yUnique;    endend
    函數(shù)輸入?yún)?shù):
  • x1, y1, x2, y2: 這些參數(shù)分別代表兩條曲線的 x 和 y 坐標(biāo)值。
  • fillColor1, fillColor2: 用于填充的兩種顏色。
  • alphaValue: 填充顏色的透明度。使用方法案例 1
  • clc;clear;close all;x1=pi:0.02:2*pi;x2=0:0.1:3*pi;y1=sin(10*x1);y2=cos(x2);% 定義填充顏色fillColor1 = 'r'; fillColor2 = 'g'; alphaValue=0.3;fillArea(x1, y1, x2, y2, fillColor1, fillColor2, alphaValue);plot(x1,y1,'-k','LineWidth',1.5);plot(x2,y2,'-k','LineWidth',1.5);ax=gca;ax.LineWidth=1.5;ax.FontName='Times new Roman';ax.FontSize=16;ax.Box='off';ax.XMinorTick='on';ax.YMinorTick='on';ax.TickDir='out';ax.GridLineStyle='-.';ax.YGrid='on';ax.XGrid='on';ax.YMinorGrid='off';ax.XMinorGrid='off';ax.MinorGridLineStyle=':';ax.YLim=[-2,2];

    案例 2
  • clc;clear;close all;x1=0:0.1:pi/2;x2=0:0.1:pi/2;y1=x1;y2=x2.^2;fillColor1 = [0.6953, 0.9961, 0.9961]; fillColor2 = [0.9961, 0.6992, 0.9961];alphaValue = 0.9;
    fillArea(x1,y1,x2,y2,fillColor1,fillColor2,alphaValue)plot(x1,y1,'-k');plot(x2,y2,'-k');
    ax=gca;ax.LineWidth=1.5;ax.XAxisLocation = 'origin';ax.YAxisLocation = 'origin';ax.FontName='Times new Roman';ax.FontSize=16;ax.Box='off';ax.XMinorTick='on';ax.YMinorTick='on';ax.TickDir='out';ax.GridLineStyle='-.';ax.YGrid='on';ax.XGrid='on';ax.YMinorGrid='off';ax.XMinorGrid='off';ax.MinorGridLineStyle=':';ax.YLim=[-0.5,2.5];

    案例 3
  • clc; clear; close all;% 讀取數(shù)據(jù):T = readtable("Book7.xls", 'VariableNamingRule', 'preserve'); % 基準(zhǔn)數(shù)據(jù)data = table2array(T(:,2:3));x = (1:length(data))';  % 確保x是列向量x1=x;x2=x;y1 = data(:,1);y2 = data(:,2);
    % 繪制基本曲線和填充區(qū)域% 定義填充顏色fillColor1 = [0.6953, 0.9961, 0.9961]; % 淺藍(lán)色fillColor2 = [0.9961, 0.6992, 0.9961]; % 淺紫色% 定義透明度alphaValue = 0.9;% 調(diào)用函數(shù)figurefillArea(x1, y1, x2, y2, fillColor1, fillColor2, alphaValue);plot(x1, y1, 'b','HandleVisibility','off');plot(x2, y2, 'r','LineWidth',1.5);defaultAxis(x)
    figurefillArea(x1(120:260), y1(120:260), x2, y2, fillColor1, fillColor2, alphaValue);plot(x1, y1, 'b','HandleVisibility','off');plot(x2, y2, 'r','LineWidth',1.5);defaultAxis(x)function defaultAxis(x)ax=gca;ax.LineWidth=1.5;ax.FontName='Times new Roman';ax.FontSize=16;ax.Box='off';ax.XMinorTick='off';ax.YMinorTick='on';ax.TickDir='out';ax.YGrid='on';ax.GridLineStyle='-.';ax.YMinorGrid='on';ax.MinorGridLineStyle=':';
    ax.XTick=linspace(0,length(x),8);ax.XTickLabel=arrayfun(@num2str, 2006:1:2013, 'UniformOutput', false);ax.YTick=6000:2000:16000;ax.YTickLabel=arrayfun(@num2str, 6000:2000:16000, 'UniformOutput', false);
    mainTicks = ax.YTick;minorTicks = mainTicks(1:end-1) + diff(mainTicks) / 2;ax.YAxis.MinorTickValues = minorTicks;ax.Title.String='Dow Jones Industrial Average from 0ct.2006 to Aug.2013';legend('1 year moving average','Location','southeast')end




    - -THE END- -

    源碼下載:gitee下載:https://gitee.com/iDMatlab/fillArea

    QQ 群下載:

    fileexchange 下載:


    參考資料:
    【1】數(shù)據(jù)來源 origin 的 Learning Center【2】https://www.zhihu.com/question/37634273/answer/2317006768



    送書活動(dòng)



    包郵贈(zèng)送 「北京大學(xué)出版社贊助《AI時(shí)代程序員開發(fā)之道》本書AI時(shí)代程序員開發(fā)之道:知識(shí)精進(jìn)+重點(diǎn)解析+上機(jī)實(shí)訓(xùn)+綜合實(shí)戰(zhàn)+ChatGPT應(yīng)用,零基礎(chǔ)入門,讓程序員插上翅膀高效開發(fā)!

    了解更多
    ▼▼▼


    【抽獎(jiǎng)方式及滿足條件】:
    1.關(guān)注「好玩的MATLAB 」公眾號(hào)和視頻號(hào)

    2.給本文點(diǎn)【】+【在看】;
    3.留言區(qū)評(píng)論點(diǎn)贊最多的前3名。
    4.本活動(dòng)只針對(duì)從未獲過獎(jiǎng)的同學(xué),之前獲過獎(jiǎng)的小伙伴,不用參加。
    同時(shí)滿足上述4個(gè)條件的讀者朋友,包郵贈(zèng)送一本。
    【開獎(jiǎng)時(shí)間】:2023年11月27日中午12點(diǎn)
    【領(lǐng)獎(jiǎng)方式】:在開獎(jiǎng)時(shí)加小編私人微信:idmatlab
    掃一掃加管理員微信

  • 發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表