背景
老有人问截断坐标轴效果的图如何绘制。这类图因为不常用、不常见,一般的具有科学绘图功能的软件也通常不作为默认的功能或函数提供。而用户自己实现起来则繁琐和技巧性强。
我搜索了先看mathematica, matlab, python里面是不是有现成的,发现还是需要第三方的代码。好在很快就找到了。——我对origin软件有种族歧视或者偏见,所以想到了也不去考虑。
代码和效果
在mathworks的文件分享里面有两个这样的代码资源, 一个对纵坐标轴作切分分割, 一个对横坐标轴作切分分割。它们的代码都可以下载。介绍性文字和用法,请自己到mathworks网站上阅读。
不注册下载的话,可以分别点下面的两个链接。顺便给出了两种源代码提供者原作者给出的效果图。
此外,原则上不接受免费答疑,您悲愤也没有用。使用过程中如果有小的问题请自行搞定。
代码1
代码2
代码3
第一部分,我觉得最出彩的地方主要是,用Bizer曲线作为坐标轴分隔符,以及Arrowheads函数选项的活用。但是用Column或Grid之类合并多个figure,并不见得多好;
data1 = { {1, 1.1}, {2, 1.5}, {3, 0.9}, {4, 2.3}, {5, 1.1}};
data2 = { {1, 1001.1}, {2, 1001.5}, {3, 1000.9}, {4, 1002.3}, {5, 1001.1}};
(*ListPlot[data1,PlotRange\[Rule]All,Joined\[Rule]True,Mesh\[Rule]\ Full,PlotStyle\[Rule]Red] ListPlot[data2,PlotRange\[Rule]All,Joined\[Rule]True,Mesh\[Rule]Full,\ PlotStyle\[Rule]Blue]*)
snip[pos_] :=
Arrowheads[{ {Automatic, pos, Graphics[{BezierCurve[{ {0, -(1/2)}, {1/2, 0}, {-(1/2), 0}, {0, 1/2}}]}]}}];
getMaxPadding[p_List] :=
Map[Max, (BorderDimensions@
Image[Show[#, LabelStyle -> White, Background -> White]] & /@
p)~Flatten~{ {3}, {2}}, {2}] + 1
p1 = ListPlot[data1, PlotRange -> All, Joined -> True, Mesh -> Full,
PlotS