电子产业一站式赋能平台

PCB联盟网

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

【高级绘图】复现SCI论文双坐标图

[复制链接]

260

主题

260

帖子

1827

积分

三级会员

Rank: 3Rank: 3

积分
1827
发表于 2022-6-26 00:00:00 | 显示全部楼层 |阅读模式
点击上方蓝字和“好玩的matlab”一起快乐的玩耍吧; C# T' A' b% E9 c

5cy1lccdctp64039275323.jpg

5cy1lccdctp64039275323.jpg
: b/ r& a5 I: Q* [3 x- J3 a$ @
好玩的matlab" e" U' K# S' D
带你解锁不一样的matlab新玩法/ C( P/ _! z; T! M* o. s2 c

3 b( q9 @7 v! H& H! o) U+ x0 `* i喜欢此推文的小伙伴们记得点赞+关注+分享
- I" q8 x1 ^0 o& @: N今天来学习一下SCI论文点误差图的绘制,以下是来自science2020[1]论文里的配图,接下来手把手带大家用MATLAB来复现一下这个点误差图。6 Z2 t* J: X* j

psiiwoso03k64039275423.png

psiiwoso03k64039275423.png

' m' M- Q: c1 J& S: ^& g2 x
, d; N1 f! R3 X! x% b0 Y$ `; c; [) Q& I0 V5 H! I) X

iydkrjehbla64039275523.gif

iydkrjehbla64039275523.gif

4 }, g3 G, O$ n9 d! R/ F效果3 Q' l. r' O. N# b# h/ f) S5 R6 Z& a
* {3 ]# h# f2 c+ {; k
以下是复现出来的图,虽然不是一模一样,但大部分元素还是复现出来了。9 _8 m* N6 g/ q/ t5 R0 S7 C

jqcfk1vlgnf64039275624.png

jqcfk1vlgnf64039275624.png

5 ~' J4 b7 B# z& B2 o! |: C
: D$ T( U/ P6 b7 u" E3 C$ {. V% V7 g) }& m) _  }
7 @8 k6 T* z( K8 F) S+ Z0 l
! ?9 R9 d1 U! u% Q  Q1 I7 B
绘制要素
6 f" Z9 O/ f$ y2 G, s5 J  e6 Q2 x; e5 D$ z2 H! k; F( p
  • 第一个绘图要素:颜色
    ! H8 m; D) F( f3 D3 y9 n* k1 e4 J看到这张图,首先映入眼帘的是啥呢?当然是颜色了!颜色配的好,作图就成功了一大半。首先要获得图片里的颜色~
  • 第二个绘图要素:数据
    % J( g4 g+ K- ^$ P# Q- h0 Q' j这张图所需要的数据就是2个子图点双y轴的横纵坐标,以及各个点对应的误差。当然小编没有这篇SCI论文里的数据,所以就仿造了一点数据。

    + i2 Y* U3 q/ L7 p
  • 第三个绘图要素:框架
    7 R* s/ b! E/ d/ N8 |2 t" R3 z4 k
         此图只需要 函数yyaxis即可绘制,subplot绘制子图。
    & L- V$ |/ {. K+ Y0 o! Q
    6 |) [8 ]4 R3 C- N

    30p2j5uuser64039275724.gif

    30p2j5uuser64039275724.gif

    ; E8 h. h  L* s6 U; A

    grqea12qhiq64039275824.png

    grqea12qhiq64039275824.png

    8 k# o: C$ u5 M( I) R1、取色 7 U+ p" b0 u: M9 C  _" z  u3 P+ E( H

    lv04ebdpl5l64039275924.png

    lv04ebdpl5l64039275924.png

    ! \3 Y% Y7 c* Z
    $ s0 ]) t7 b- W5 m$ K3 C) e& r还是使用和【图片配色】那篇推送一样的方法,还没有看过的可以去看一眼,要想复现出一样的图,肯定先得拿出这张图的颜色。
    7 j" |5 s2 i$ ?/ p: V; @3 r
    ! A( p' D- E+ }9 P用以下代码取色图片就是上面的截图,运行之后在图片需要的颜色处打点,完了之后按enter,颜色就自动取出来了。
    ) l. j5 t. r4 N' s- X6 N
  • % 公众号:好玩的MATLABhua=imread('1.png');figure(1)imshow(hua);[c1,c2]=getpts; %选择颜色点c1=ceil(c1); %将选点的位置化为整数c2=ceil(c2);for i=1:length(c1)    color(i,:)=hua(c2(i),c1(i),:);endcolor=double(color);color=color/255;
    . Q( c/ t+ }2 F; I以下就是取出的几种颜色了,建议把它记录下来,省得下一次麻烦。记录下来的颜色变量如下# ]6 ?$ x5 X1 C* b
  • color=[0.784313725490196,0.843137254901961,0.780392156862745;0.996078431372549,0.882352941176471,0.776470588235294;0.129411764705882,...    0.447058823529412,0.619607843137255;0.427450980392157,0.447058823529412,0.615686274509804;...    0.796078431372549,0.141176470588235,0.333333333333333];?
    2 h& X7 Z. b! q7 g. R( f/ E
    . Z6 t' i8 D7 ^: i7 S. C$ h' s
    5 [9 V0 ~& B8 D7 k: O2 v8 W8 b$ n- T0 r  v; b8 u( J, i
    2、数据 6 i3 ]) Z9 z3 d  Y% U- p

    * N( j9 T! D: M1 {7 T9 L( x% B' _* P$ s* W/ T6 {2 h2 `
       以下是根据原图自拟的数据,以下保存了2个子图的x坐标数据,y坐标数据以及误差,每个子图有3个不同颜色的线条
    # @0 Y8 J* J- W' {
  • % 公众号:好玩的MATLABx11=[0,0.8,1,5];y11=[1.8,1,0.95,0.9];x12=[5,5.5,6,9,10];y12=[0.9,1.2,1.7,1.8,1.9];x13=[0:0.5:10];y13=4.6+0.2*rand(1,length(x13));
    $ k, {, Z; L3 X. Ex21=[0,0.8,1,5];y21=[1.8,1,0.95,0.9];x22=[5,5.5,6,9,10];y22=[0.9,1.2,1.7,1.8,1.85];x23=[0:0.5:10];y23=4.8+0.3*sin(1*pi/10*(x23-7));
    3 B3 b5 G" S+ N# E6 ^; b+ c9 s6 m% ~, a3 A; r2 N7 v

    , K/ S- B: M0 ?/ ~, S: s% ]* x4 \2 G7 a# ?
    3、画图 0 s4 }4 J4 p8 X
    , m2 q; z" M* {; A  \; v
    ; L0 z- H) q% @  E, a& U
    1 双Y轴的绘制
    ' Z" |- _6 J; g. @: d使用 yyaxis left 和 yyaxis right 命令即可绘制' v* _/ e7 L# P0 }- ~8 R1 b- X
  • colororder([color(3,:);color(5,:)])yyaxis leftplot(x21,y21,'-','Color',color(3,:),'linewidth',2);plot(x22,y22,'-','Color',color(4,:),'linewidth',2);hold onxlabel('Time (h)');
    7 ~: H$ Y6 ?5 @yyaxis rightplot(x23,y23,'-o','Color',color(5,:),'linewidth',2);ylim(Y_lim1)hold onset(gca,'tickdir','out')hold onset(gca,"FontName","Times New Roman","FontSize",12,"LineWidth",1.5)box off
    5 L1 B0 `* m- }' [2 背景颜色设置- g" {3 s- g1 L0 p& ?
      其实可以注意到这个图比较惊艳的一部分就是它的背景颜色对比,matlab本身是没有对背景颜色处理的命令的,所以想到使用填充正方形的形式对其处理,也可以用其他的软件对后期进行处理。画两个长方形填充可以达到类似效果
    8 ]+ V; @' q( o) O/ q
  • det=0.01;rectangle('Position',[X_lim(1)+det,Y_lim(1)+det,X_lim(2)/2-2*det,Y_lim(2)-Y_lim(1)-det],'facecolor',color(1,:),'EdgeColor',color(1,:))hold onrectangle('Position',[X_lim(2)/2,Y_lim(1)+det,X_lim(2)/2-2*det,Y_lim(2)-Y_lim(1)-det],'facecolor',color(2,:),'EdgeColor',color(2,:))hold on0 E/ M8 w' v" l6 l( O' A2 u
    3 无缝隙子图   可以注意到这张图的两个子图是无缝隙的,如果普通使用subplot是会留有缝隙的,因此我们可以使用以下代码对图进行布局
    % i& ]- j8 K7 n7 S9 F4 P7 A$ Z: U
  • ha=get(gcf,'children');set(gca,"FontName","Times New Roman","FontSize",12,"LineWidth",1.5)box offset(gcf,'position',[50,50,700,500])%图幅的大小,250,250是图片的位置,1200是宽度,300是高度,本例宽度是高度的4倍,四张子图set(ha(1),'position',[0.2 0.5 0.7 0.4])%注意ha(1)是第二幅子图,ha(2)是第一幅子图,以此类推,与我们正常逻辑顺序相反,不知道为什么会出现这种情况set(ha(2),'position',[0.2 0.1 0.7 0.4])%这里的position和上面的position不一样,这里的是百分比的关系,第一个数字70%是从右往左70%,0.2是从下到上20%,  r7 m( @3 H" Q* e- _  }

    & r/ [6 T. w' s! a' C
    2 @0 k0 F6 N6 F5 |6 |& `完整源码  f" s# P2 T8 O
    , H- I, w2 S6 X0 ]$ c1 j% c% u; }) @
  • clc;clear;close all;color=[0.784313725490196,0.843137254901961,0.780392156862745;0.996078431372549,0.882352941176471,0.776470588235294;0.129411764705882,...    0.447058823529412,0.619607843137255;0.427450980392157,0.447058823529412,0.615686274509804;...    0.796078431372549,0.141176470588235,0.333333333333333];% color=[0.184313725490196,0.466666666666667,0.654901960784314;0.650980392156863,...%     0.239215686274510,0.349019607843137;0.427450980392157,0.447058823529412,0.615686274509804;...%     0.784313725490196,0.843137254901961,0.780392156862745;0.996078431372549,0.882352941176471,...%     0.776470588235294];%上图三根线的坐标x11=[0,0.8,1,5];y11=[1.8,1,0.95,0.9];x12=[5,5.5,6,9,10];y12=[0.9,1.2,1.7,1.8,1.9];x13=[0:0.5:10];y13=4.6+0.2*rand(1,length(x13));7 r4 y) i5 }% w  X: T% `
    x21=[0,0.8,1,5];y21=[1.8,1,0.95,0.9];x22=[5,5.5,6,9,10];y22=[0.9,1.2,1.7,1.8,1.85];x23=[0:0.5:10];y23=4.8+0.3*sin(1*pi/10*(x23-7));
    2 M; J! ~2 G/ j( D* N) a" P# d" ysubplot(2,1,1)set(gca,'FontName','Times New Roman','FontSize',12);X_lim=[0 10];  Y_lim=[0.8 2.15]; Y_lim1=[4.4 5.8];xlim(X_lim);ylim(Y_lim)
    0 @* }: O: l1 B( S( qdet=0.01;rectangle('Position',[X_lim(1)+det,Y_lim(1)+det,X_lim(2)/2-2*det,Y_lim(2)-Y_lim(1)-det],'facecolor',color(1,:),'EdgeColor',color(1,:))hold onrectangle('Position',[X_lim(2)/2,Y_lim(1)+det,X_lim(2)/2-2*det,Y_lim(2)-Y_lim(1)-det],'facecolor',color(2,:),'EdgeColor',color(2,:))hold oncolororder([color(3,:);color(5,:)])yyaxis leftplot(x21,y21,'-','Color',color(3,:),'linewidth',2);plot(x22,y22,'-','Color',color(4,:),'linewidth',2);hold onxlabel('Time (h)');
    7 }8 q$ ^, a# ]% R$ q* Uyyaxis rightplot(x23,y23,'-o','Color',color(5,:),'linewidth',2);ylim(Y_lim1)hold onset(gca,'tickdir','out')hold onset(gca,"FontName","Times New Roman","FontSize",12,"LineWidth",1.5)box off% set(fig,'defaultAxesColorOrder',[left_color; right_color]);subplot(2,1,2)set(gca,'FontName','Times New Roman','FontSize',12);%set( gca,'xticklabel', [] );X_lim=[0 10];  Y_lim=[0.8 2.15]; Y_lim1=[4.4 5.8];xlim(X_lim);ylim(Y_lim)
    ( U6 d/ w' ]1 T  W  `' Ndet=0.01;rectangle('Position',[0+det,Y_lim(1)+det,X_lim(2)/2-2*det,Y_lim(2)-Y_lim(1)-det],'facecolor',color(1,:),'EdgeColor',color(1,:))hold onrectangle('Position',[X_lim(2)/2,Y_lim(1)+det,X_lim(2)/2-2*det,Y_lim(2)-Y_lim(1)-det],'facecolor',color(2,:),'EdgeColor',color(2,:))hold on
    ! d/ ]9 t3 \" _4 ?8 X6 }colororder([color(3,:);color(5,:)])yyaxis leftplot(x11,y11,'-','Color',color(3,:),'linewidth',2);hold onplot(x12,y12,'-','Color',color(4,:),'linewidth',2);ylabel('Voltage (V)')hold onyyaxis rightplot(x13,y13,'-o','Color',color(5,:),'linewidth',2);ylim(Y_lim1)hold onset(gca,'tickdir','out')% ylabel('PH','Color',color(5,:))ylabel('PH')ha=get(gcf,'children');set(gca,"FontName","Times New Roman","FontSize",12,"LineWidth",1.5)box offset(gcf,'position',[50,50,700,500])%图幅的大小,250,250是图片的位置,1200是宽度,300是高度,本例宽度是高度的4倍,四张子图set(ha(1),'position',[0.2 0.5 0.7 0.4])%注意ha(1)是第四幅子图,ha(2)是第三幅子图,以此类推,与我们正常逻辑顺序相反,不知道为什么会出现这种情况set(ha(2),'position',[0.2 0.1 0.7 0.4])%这里的position和上面的position不一样,这里的是百分比的关系,第一个数字70%是从右往左70%,0.2是从下到上20%,
    ( t3 E% \$ V) ^* M: G, E
    . I0 L! k+ Y) H8 q7 @) n+ b2 w一张好看的双y轴图就诞生了~
    ( j' @  ^' _0 ]+ A& P( G5 a$ n% L9 U. C/ Z
    - E' c( g6 e( C( Q. \: h# q% W
    END
    : z& z& `1 Z2 A) G6 ]* ]9 l( N

    7 W' V4 K/ h' F$ P. Q$ n
    2 E/ U5 r( Q, |. p/ ~5 }: q参考资料:
    ! ?& I* `) _7 I6 N, _! j3 Z; C【1】图片来源(sciencemag.org)【0.1126/science.abb9554】
    9 i& U+ R% R/ y$ s! j" h$ c2 p. s2 M4 X# Y( o. T. _
    往期精彩回顾
    $ W5 |; P: l0 V6 ~

    qb4lrul2k2064039276024.png

    qb4lrul2k2064039276024.png
    $ y( I6 f1 x, F
    推荐 | 【建模算法】拟合推荐 | 【建模算法】插值推荐 | 【好玩的源码】MATLAB绘制铁塔推荐 | 【好玩的源码】 MATLAB操作Excel实现自动化办公/ u. J+ Y% V! ^2 ~

    t2kfbxdnckv64039276124.png

    t2kfbxdnckv64039276124.png

    4 ~, y* A' o. v, F* I( ^. A# D/ |
    7 |) M  C: W, \0 i4 u
    * ^/ i& t8 [5 @2 x

    t24bmqacxfu64039276224.jpg

    t24bmqacxfu64039276224.jpg

    0 u! E. |7 a/ z/ @. P2 m6 n' u2 p
    ↓↓↓ 点击"阅读原文" 【加入QQ群
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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