基于 asymptote 的一个方案(仅作为练习,这张图应该更适合 pgfplot 这种可以通过数据绘图的宏包,下面 IgnoreAspect 其实也可以在 tikz 找到对应的方案的,使用 scale 等等 ):

完整代码如下:
/*======== 设置(Set) =========*/
settings.outformat="pdf";
settings.tex="xelatex"; usepackage("ctex","fontset=fandol");
size(7cm,6cm,IgnoreAspect); arrowbar cAr=Arrow(5);
pen cdotted=linetype(new real[] {0,3});
/*======== 定义(Define) =========*/
pair O=(0,0),A=(1,30),B=(1.5,30),C=(2,50),D=(3,50),F=(5,0);
pair G=(0.5,50),H=(3,0);
path cong=(0,50)--G--H;
path hui=O--A--B--C--D--F--H;
/*======== 绘制(Draw) =========*/
draw(cong,cdotted); draw(hui);
draw(Label("\small$t(\mathrm{h})$",Relative(1),S),(0,0)--(6.5,0),cAr);
draw(Label("\small$s(\mathrm{km})$",Relative(1),E),(0,0)--(0,60),cAr);
draw(Label("\small 小聪",W),(5,55)--(6.5,55),cdotted);
draw(Label("\small 小慧",W),(5,45)--(6.5,45));
/*======== 标注(Label) =========*/
for (real t=1; t<=5; t+=1) {
draw((t,0)--(t,1.5));
label((string)t,(t,0),S);
}
for (real s=10; s<=50; s+=10) {
draw((0,s)--(0.25,s));
label((string)s,(0,s),W);
}
label("$O$",O,SW); label("$A$",A,W); label("$B$",B,E);
label("$C$",C,N); label("$D$",D,NE); label("$F$",F,NE);
label("$G$",G,N); label("$H$",H,NNE);






























问 欧几里得宏包绘制一次函数图形