点击上方蓝字和“好玩的matlab”一起快乐的玩耍吧; C# T' A' b% E9 c
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
' 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
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
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
; E8 h. h L* s6 U; A
grqea12qhiq64039275824.png
8 k# o: C$ u5 M( I) R1、取色 7 U+ p" b0 u: M9 C _" z u3 P+ E( H
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/ 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 on0 E/ M8 w' v" l6 l( O' A2 u
3 无缝隙子图 可以注意到这张图的两个子图是无缝隙的,如果普通使用subplot是会留有缝隙的,因此我们可以使用以下代码对图进行布局
% i& ]- j8 K7 n7 S9 F4 P7 A$ Z: Uha=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
$ y( I6 f1 x, F
推荐 | 【建模算法】拟合推荐 | 【建模算法】插值推荐 | 【好玩的源码】MATLAB绘制铁塔推荐 | 【好玩的源码】 MATLAB操作Excel实现自动化办公/ u. J+ Y% V! ^2 ~
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
0 u! E. |7 a/ z/ @. P2 m6 n' u2 p
↓↓↓ 点击"阅读原文" 【加入QQ群】 |