一般的科学论文用图片可以用SciDraw在Mathematica上实现,有些特殊的功能,比如剪断坐标轴的,可以用下面方式:
ClearAll[snip] snipCurve = Graphics[{BezierCurve[{{0, -(1/2)}, {1/3, 0}, {-1/3, 0}, {0, 1/2}}]}]; snip[pos_?NumberQ, primitive_Graphics: snipCurve] := snip[{pos}, primitive]; snip[pos_List, primitive_Graphics: snipCurve] := Arrowheads[{Automatic, #, primitive} & /@ pos]; snip[pos_List, primitives_List] := Arrowheads[ Flatten /@ MapThread[{Automatic, ##} &, {pos, primitives}]]; snip[sizes_List, pos_List, primitives_List] := Arrowheads[Flatten /@ Transpose[{sizes, pos, primitives}]] 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}}; data3 = {{1, 8001.1}, {2, 8001.5}, {3, 8000.9}, {4, 8002.3}, {5, 8001.1}}; 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, PlotStyle -> Red, AxesStyle -> {{Arrowheads[.035(*here*), .035], Directive[Black, 12]}, {snip[1], Directive[Black, 12]}}, PlotRangePadding -> .2, ImagePadding -> {{50, 5}, {15, 5}}, AspectRatio -> 1/3]; p2 = ListPlot[data2, PlotRange -> All, Joined -> True, Mesh -> Full, PlotStyle -> Blue, Axes -> {False, True}, AxesStyle -> {{None}, {snip[{0, 1}], Directive[Black, 12]}}, PlotRangePadding -> .2, ImagePadding -> {{50, 15}, {3, 5}}, AspectRatio -> 1/3]; p3 = ListPlot[data3, PlotRange -> All, Joined -> True, Mesh -> Full, PlotStyle -> Magenta, Axes -> {False, True}, AxesStyle -> {{None}, {snip[{Automatic, .035}, {0, 1}, {snipCurve, {}}], Directive[Black, 12]}}, PlotRangePadding -> .2, ImagePadding -> {{50, 15}, {3, 5}}, AspectRatio -> 1/3]; output = Column[{p3, p2, p1} /. Graphics[x__] :> Graphics[x, ImagePadding -> getMaxPadding[{p1, p2, p3}], ImageSize -> 600]] Export["testOutputSnipAxis.png", output]