电子产业一站式赋能平台

PCB联盟网

搜索
查看: 128|回复: 0
收起左侧

MATLAB|交叉折线图之间分色填充

[复制链接]

210

主题

210

帖子

1678

积分

三级会员

Rank: 3Rank: 3

积分
1678
发表于 2023-11-26 15:33:00 | 显示全部楼层 |阅读模式
点击上方蓝字和“好玩的MATLAB”一起快乐玩耍吧!

m42rzx5oshn64015139327.jpg

m42rzx5oshn64015139327.jpg

好玩的matlab
带你解锁不一样的matlab新玩法

今天介绍一下交叉折现之间的分色填充,喜欢此推文的小伙伴们记得点赞+关注+分享!【尊重作者劳动成果,转载请注明推文链接和公众号名】
效果图

o0zockmicay64015139427.png

o0zockmicay64015139427.png


c1eiijes2ba64015139527.gif

c1eiijes2ba64015139527.gif

交叉折线图之间分色填充概念介绍交叉折线图之间的分色填充是一种高级数据可视化技巧,它涉及在两条或多条在一定区间内交叉或重叠的折线图之间应用不同的颜色填充。此技术主要用于图形化地表示两组或多组数据之间的比较和对比,特别是它们随时间或其他变量的变化。应用领域金融市场分析:展现不同金融工具或指数在时间序列中的表现,突出市场波动或趋势。
生物医学研究:比较不同治疗方法或条件下的生物标志物变化。
环境监测:可视化不同环境因素(如温度、湿度)随时间的变化及其相互作用。
市场调研:对比不同消费群体的购买习惯或品牌偏好随时间的变化。
优点增强数据解释性:通过颜色差异,使得数据集间的比较更加直观和易于理解。
强调数据动态:特别适用于展现数据随时间或其他变量的动态变化。
视觉吸引力:相比于传统的折线图,颜色填充增加了图表的视觉吸引力,提高了观众的关注度。
缺点颜色选择的重要性:不当的颜色选择可能导致误解或视觉混淆,特别是在色盲观众中。
数据解读的准确性:过度依赖颜色填充可能会忽视数据的其他重要方面,如统计显著性。
图表复杂性:过多的数据集或颜色可能使图表过于复杂,难以解读。
结论交叉折线图之间的分色填充通过颜色的视觉对比强化了数据间的差异和关系。正确使用时,它可以有效地传达复杂信息,并帮助观众理解数据动态。然而,为了保持图表的有效性和易读性,需要仔细考虑颜色选择和图表设计。
绘图工具函数fillArea收藏、点赞=学会
  • function fillArea(x1, y1, x2, y2, fillColor1, fillColor2, alphaValue)%--------------------------------------------------------------------------% @Author: 好玩的Matlab && 猪猪% @公众号:好玩的Matlab% @Created: 09,18,2023% @Email: 2377389590@qq.com% 尊重劳动成果,转载请备注推文链接和公众号名,严禁商用。%--------------------------------------------------------------------------plot(x1,y1,'color','none','HandleVisibility','off');plot(x2,y2,'color','none','HandleVisibility','off');% 调用函数x1 = x1(:); y1 = y1(:);x2 = x2(:); y2 = y2(:);% 查找交点[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))];%边界交叉点[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);% 交叉点[x1,y1]=insertData(x1, y1, xi, yi);[x2,y2]=insertData(x2, y2, xi, yi);% 边界点插入[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);% 提取范围数据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)        % 确保两个多边形具有相同数量的点        % 同时保留原有的数据点        % 确定 x 的范围和新的 x 网格        xMin = min(min(x1), min(x2));        xMax = max(max(x1), max(x2));        % 生成一个包含所有原始 x 值的合并且排序的数组        xAll = unique([x1; x2]);        % 如果合并后的 xAll 长度小于两个数据集中最长的长度        % 则在 xAll 中插入额外的点以匹配最长的数据集长度        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 中的数据插入到 xMain 和 yMain 中        % 并确保结果是唯一的并且按照 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
    函数输入参数:
  • x1, y1, x2, y2: 这些参数分别代表两条曲线的 x 和 y 坐标值。
  • 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];

    pk4lr0t4k2c64015139628.png

    pk4lr0t4k2c64015139628.png

    案例 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];

    03gcwljzrrh64015139728.png

    03gcwljzrrh64015139728.png

    案例 3
  • clc; clear; close all;% 读取数据:T = readtable("Book7.xls", 'VariableNamingRule', 'preserve'); % 基准数据data = table2array(T(:,2:3));x = (1:length(data))';  % 确保x是列向量x1=x;x2=x;y1 = data(:,1);y2 = data(:,2);
    % 绘制基本曲线和填充区域% 定义填充颜色fillColor1 = [0.6953, 0.9961, 0.9961]; % 浅蓝色fillColor2 = [0.9961, 0.6992, 0.9961]; % 浅紫色% 定义透明度alphaValue = 0.9;% 调用函数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

    kslqmxtas3x64015139828.png

    kslqmxtas3x64015139828.png


    oz2ab0lcbbx64015139928.png

    oz2ab0lcbbx64015139928.png


    - -THE END- -

    源码下载:gitee下载:https://gitee.com/iDMatlab/fillArea

    12i2qzgqglj64015140028.png

    12i2qzgqglj64015140028.png

    QQ 群下载:

    xj51stf42s464015140128.png

    xj51stf42s464015140128.png

    fileexchange 下载:

    uedwbhhqvqv64015140229.png

    uedwbhhqvqv64015140229.png


    参考资料:
    【1】数据来源 origin 的 Learning Center【2】https://www.zhihu.com/question/37634273/answer/2317006768

    ffj1k2kyluf64015140329.gif

    ffj1k2kyluf64015140329.gif

    bpaqhc3ftzk64015140429.png

    bpaqhc3ftzk64015140429.png

    送书活动

    tlalqsyqqx364015140529.png

    tlalqsyqqx364015140529.png

    twyqpaepile64015140629.gif

    twyqpaepile64015140629.gif


    包邮赠送 「北京大学出版社赞助《AI时代程序员开发之道》本书AI时代程序员开发之道:知识精进+重点解析+上机实训+综合实战+ChatGPT应用,零基础入门,让程序员插上翅膀高效开发!

    0xvuczns1jz64015140729.png

    0xvuczns1jz64015140729.png

    了解更多
    ▼▼▼

    1qpxaxzfqxi64015140830.jpg

    1qpxaxzfqxi64015140830.jpg


    【抽奖方式及满足条件】:
    1.关注「好玩的MATLAB 」公众号和视频号

    wud4izsnrwi64015140930.jpg

    wud4izsnrwi64015140930.jpg

    2.给本文点【】+【在看】;
    3.留言区评论点赞最多的前3名。
    4.本活动只针对从未获过奖的同学,之前获过奖的小伙伴,不用参加。
    同时满足上述4个条件的读者朋友,包邮赠送一本。
    【开奖时间】:2023年11月27日中午12点
    【领奖方式】:在开奖时加小编私人微信:idmatlab
    扫一扫加管理员微信

    qlk1jrypuvz64015141030.png

    qlk1jrypuvz64015141030.png

    plq0sxjutpk64015141130.jpg

    plq0sxjutpk64015141130.jpg
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表