当前位置:首页>python>Python气象绘图——垂直剖面图

Python气象绘图——垂直剖面图

  • 2026-02-10 13:52:06
Python气象绘图——垂直剖面图
讲师招募 | 免费数据资源 |最新最热
课程安排
3月21日-22日、28日-29日、
4月4日
最新AI-Python自然科学领域机器学习与深度学习技术高级培训班
3月27日-28日、
4月3日-4日
高水平学术论文写作的“破局”之道暨AI人机协同从前沿选题挖掘、智能写作工程、顶刊图表可视化、到精准选刊投稿与审稿博弈策略的一站式实践高级培训班
3月13日-14日、
20日-21日
一图胜千言-顶刊级科研绘图工坊暨AI支持下Nature级数据可视化高级培训班
3月28日-29日
AI赋能·SCI论文从实验设计到发表全流程实践训练营

1.画布创建

首先创建的画布不需要设置投影类型,使用默认的画布即可。

fig=plt.figure(figsize=(w,h),dpi=dpi)
axe=plt.subplot(1,1,1)

2.设置图题

axe.set_title(str, fontsize=size,y=y)

3.设置绘图边界

axe.set_xlim(l, r)
axe.set_ylim(b, t)
axe.invert_yaxis()  # 翻转纵坐标

这里需要注意两点:

a.默认画布的范围设置函数有所不同

b.由于我们所做垂直剖面图,一般纵坐标都是气压(离地高度也能够添加,后面做介绍)。而近地面的气压大,高空气压小,因此纵坐标由下至上的变化过程是由大到小。而set_ylim函数要求t>b,因此我们需要翻转纵坐标

4.网格绘制

axe.grid(color=grid_color, linestyle=grid_type, linewidth=grid_linewidth, axis=axis)

不是投影画布了,因此也不需要gridlines啦,可以省点力气

这里要提一下axis,可以设置的参数有'both', 'x','y'。如果不设置axis的话默认就是both,x与y分别表示只显示x轴或者y轴的网格。

5.坐标轴设置

首先设置横坐标:

plt.xticks(position_list, name_list, fontsize=ticks_size, color=ticks_color)
axe.set_xlabel(str, fontproperties=Simsun, fontsize=ylabelsize)
axe.get_xaxis().set_visible('True')

plt.xticks函数用于自定义横坐标的刻度,position_list表示插入自定义刻度的位置;name_list与position_list对应,表示对应位置下插入的自定义刻度,string与float均可以。

set_xlabel设置的是横坐标的标签

axe.get_xaxis().set_visible('True')是获取了axe的横坐标刻度+标签,并设置可视化,True表示显示,False表示隐藏

然后设置纵坐标:

plt.yticks(fontsize=ticks_size, color=ticks_color)
axe.get_yaxis().set_visible('True')
axe.set_yticks(np.arange(b, t, i))
axe.set_ylabel(str, fontproperties=Simsun, fontsize=ylabelsize)

axe.set_yticks是另一种设置坐标刻度的方式,不支持自定义方式,好处就是用起来简单快捷

最后对刻度进行统一格式修改:

axe.tick_params(length=tick_length)

axe.tick_params有很多功能,这里只用到了设置刻度线的长短

labels = axe.get_xticklabels() + axe.get_yticklabels() 
[label.set_fontproperties(FontProperties(fname="./font/Times.ttf", size=8)) for label in labels]

然后是将刻度的字体进行修改一下,修改为Time New Roman字体,同时修改字体大小

6.气象信息绘制

把画布绘制完以后,就可以进行气象信息的绘制啦。由于是垂直剖面,因此在数据处理上需要花一些功夫,同时在绘制的时候也要注意一些技巧。这一部分干讲会比较难懂,先上一个图,然后逐步分析。

6.1数据处理

图中填色的内容是臭氧浓度,箭头表示剖切面的风速,右上角的红色线条表示剖切面。因此我们首先需要读取数据,然后对数据进行插值与处理,最后才是根据数据绘制图形。

在本文中以wrf模式的输出结果为例,进行示范。如果是同样使用wrf模式的,可以参考下面的数据处理过程。如果使用的不是wrf模式,可以跳过直接看后面的数据绘制过程。(由于只是为了绘图展示用,因此请不要过度在意图中数值的准确与否)

  • 首先声明一下需要引入的库:
import netCDF4 as nc
from wrf import to_np,getvar,CoordPair,vertcross,interplevel
  • 然后确定插值的起始经纬度与压力范围:
big_p,small_p,interval_p=1000,700,50
start_lon,end_lon,interval_lon=121,122,0.2
start_lat,end_lat=30.8,31.2
  • 然后需要用到CoordPair库,将始末点包装为CoordPair对象,用于插值用:
startpoint = CoordPair(lat=start_lat, lon=start_lon)
endpoint = CoordPair(lat=end_lat, lon=end_lon)
  • 然后照例读取wrf输出文件:
ncfile=nc.Dataset('D:\wrf_simulation\\2meic\\wrfout_d03_2016-07-21_12_2meic')
  • 根据自己的需要读取数据:
o3=getvar(ncfile,'o3',timeidx=126)
o3 = o3 * 1000 / 22.4 * 48 * 273.15 / (getvar(ncfile, 'tk', timeidx=126)) * (getvar(ncfile, 'pressure', timeidx=126)) / 1013.25
lat=getvar(ncfile,'lat')
lon=getvar(ncfile,'lon')
height=getvar(ncfile,'height')
hgt=getvar(ncfile,'HGT')
height2earth=height-hgt
ua=getvar(ncfile,'ua',timeidx=126)
va=getvar(ncfile,'va',timeidx=126)
wa=getvar(ncfile,'wa',timeidx=126)
wa = wa * 10
p = getvar(ncfile, 'pressure', timeidx=126)

由于wrf-chem中o3的浓度单位是ppmv,需要将其转换为ug/m3的单位。而后分别读取纬度、经度;读取海拔高度与地形高度用于计算离地高度(之后有用);读取风速数据,其中由于垂直风向很小,因此放大10倍用于观测方便;最后读取气压

  • 读取完数值以后就开始进行插值了:
o3_vert = vertcross(o3, p, wrfin=ncfile, start_point=startpoint, end_point=endpoint, latlon=True)
ua_vert = vertcross(ua, p, wrfin=ncfile, start_point=startpoint, end_point=endpoint, latlon=True)
va_vert = vertcross(va, p, wrfin=ncfile, start_point=startpoint, end_point=endpoint, latlon=True)
wa_vert = vertcross(wa, p, wrfin=ncfile, start_point=startpoint, end_point=endpoint, latlon=True)

这里使用到的是vertcross函数,首先输入读取的数值与压力,然后由于本次插值输入的始末点是CoordPair对象的经纬度坐标,因此需要告诉vertcross指定文件是之前读取的ncfile,然后是始末点,最后的latlon=True可以使得最后的插值结果更详细一些,False的话结果更简单

输出的数据结果如下图,是一个xarray.DataArray对象。除了数据本身以外还包含坐标信息,而这个坐标包含两维,xy_loc表示横向的数据,即沿着剖切线方向的各个点的经纬度;vertical表示垂直方向的坐标,单位是hPa,由大到小。由于数据本身并不规整,并且xarray数据本身插值即存在一定不严格的情况,导致插值数据的起始经纬度与用户设置的会有一些出入,属于正常现象。只要初始经纬度都在数据所包括的范围内,就不会有太大问题。

  • 由于风速具有u和v两个分量的,而剖切线方向并不一定会垂直于经纬度方向,所以需要将水平方向的风速投影到剖切线上:
#计算风速
ws_vert = np.sqrt(ua_vert ** 2 + va_vert ** 2)
#计算风向夹角
wdir_vert = np.arctan2(va_vert, ua_vert) * 180 / np.pi
line_angel = np.arctan2(end_lat - start_lat, end_lon - start_lon) * 180 / np.pi
vl_angel = wdir_vert - line_angel
#vl_angel = np.cos(vl_angel / 180 * np.pi)
vl_angel = np.cos(np.deg2rad(vl_angel))
ws_vert = ws_vert * vl_angel

关于这几个参数的关系,可以看下面这个简单的示意图。

最终要满足的就是让风速*vl_angel从而投影到剖切线方向。ws_vert是一个正值,不需要在这里考虑风速的方向,因为最后在剖切线上的正负值是由vl_angel来负责的。需要注意的是在使用np.cos的时候要将弧度转换为角度。而np.arctan2是个很好用的函数,可以自动输出360°的arctan值。

  • 之前说了,由于插值的时候插值数据的网格点并不会规整分布,因此如果要精确绘图的话需要读取插值点的经纬度以及气压数据:

首先读取一下插值点的气压数据,这个不用处理,很简单。由于插值的臭氧,风速始末点都一致,因此每个数据点的经纬度与气压都是相同的,随便找一个插值数据读取即可。to_np是让数据从xarray转换为ndarray方便后续操作的,va_vert.coords可以直接读取xarray对象的Coordinates属性参数。

plist = to_np(va_vert.coords['vertical'])

然后根据气压值,去计算对应的离地高度,为了后续绘图用。这里用到的是interplevel,wrf-python的垂直方向插值函数,计算对应气压的离地高度。这里有一点需要注意,因为绘图的时候气压还是按照初始设定的气压起始以及间隔绘制的,因此高度也要对应的插值。

同时由于每个格点的离地高度多少会有点区别,但是区别又不大,因此采用了np.max函数取同一层下的最大值。最后用了个简单地方法快速取个整,如果要保留小数点的话建议用np.around函数

hlist = []
for i in range(big_p, small_p - interval_p, -interval_p):
    hlist.append(float(np.max(interplevel(height2earth, p, i)).values))
hlist = np.array([int(i) for i in hlist]) #简单地取整

接下去要读取插值数据的经纬度了,由于插值数据的xy_loc是一个难以直接读取的数据结构,因此干脆直接转换成字符串形式读取一下:

for i in range(len(ua_vert.coords['xy_loc'])):
     s = str(ua_vert.coords['xy_loc'][i].values)
     print(s)

他的经纬度数据还是有规律可循的,基本上每一个lat和lon后面就分别跟着经纬度,于是用字符串的find函数就能够解决,然后要将读取的字符串再变回float:

lonlist, latlist= [], []
for i in range(len(ua_vert.coords['xy_loc'])):
    s = str(ua_vert.coords['xy_loc'][i].values)
    lonlist.append(float(s[s.find('lon=') + 4:s.find('lon=') + 12]))
    latlist.append(float(s[s.find('lat=') + 4:s.find('lat=') + 12]))

最后处理我们保存的经纬度列表,以及之后要插入刻度的字符串:

str_lonlist, float_lonlist = [], []
a = np.mgrid[0:len(lonlist) - 1:complex(str(int(round((end_lon + interval_lon - start_lon) / interval_lon))) + 'j')] #生成位置列表
a = np.around(a, decimals=0) #四舍五入取整
#处理插入x轴的刻度标签
for i in range(int((end_lon + interval_lon - start_lon) / interval_lon)):
    float_lonlist.append(lonlist[int(a[i])])
    lo, la = round(lonlist[int(a[i])], 2), round(latlist[int(a[i])], 2)
    str_lonlist.append(str(lo) + '°E' + "\n" + str(la) + '°N')

由于我们的刻度肯定不是每个格点都插入的,要按照我们预期的初始经纬度和间隔插入,因此需要一个位置列表:a。而str_lonlist是用于保存插入的刻度的,做了个简单的处理让刻度可以显示两行,上面经度下面纬度。别的不多做解释了,都是python的基础处理方式。

6.2数据绘制

呼~数据终于处理好了

图像绘制就简单很多了:

o3_level=np.arange(40,410,20)
contourf = axe.contourf(lonlist, plist, o3_vert, levels=o3_level, cmap=cmaps.NCV_jaisnd,extend='neither')
axe.quiver(lonlist, plist, ws_vert, wa_vert, pivot='mid',
           width=0.001, scale=120, color='k', headwidth=4,
           alpha=1)

关于quiver和contourf可以看下面两篇文章,不做赘述了:爱垂钓的猫:Python气象绘图笔记(四)——填色与colorbar爱垂钓的猫:Python气象绘图笔记(六)——矢量箭头

6.3colorbar的绘制

同样可以参考这篇文章爱垂钓的猫:Python气象绘图笔记(四)——填色与colorbar

这里就贴上代码:

fig.subplots_adjust(right=0.78)
rect=[0.84,0.07,0.01,0.57]# 分别代表,水平位置,垂直位置,水平宽度,垂直宽度
cbar_ax=fig.add_axes(rect)
cb=fig.colorbar(contourf,drawedges=True,ticks=o3_level,cax=cbar_ax,orientation='vertical',spacing='uniform')
cb.set_label('$\mathrm{O_3}$浓度',fontsize=12)
cb.ax.tick_params(length=0)
labels=cb.ax.get_xticklabels()+cb.ax.get_yticklabels()
[label.set_fontproperties(FontProperties(fname="./font/Times.ttf",size=10))forlabelinlabels]

6.4小地图的绘制

其实右上角的小地图不是什么很难的东西,无非就是在画布上创建一个新的子图:

axe1 = fig.add_axes([0.77,0.69,0.2,0.2], projection=ccrs.PlateCarree())

不过这个子图我们给定了x的位置,y的位置,x方向的长度与y方向的长度。同时由于是地理绘图因此加上了投影类型。

下面就加上地理图的细节部分,贴上代码:

axe1.add_feature(cfeat.COASTLINE.with_scale("10m"), linewidth=0.7, color='k')
axe1.add_feature(cfeat.RIVERS.with_scale("10m"))
axe1.add_feature(cfeat.OCEAN.with_scale("10m"))
axe1.add_feature(cfeat.LAKES.with_scale("10m"))
axe1.set_extent([120, 123, 29.5, 32.5], crs=ccrs.PlateCarree())

gl = axe1.gridlines(crs=ccrs.PlateCarree(), draw_labels=False, linewidth=0.5, color='gray',linestyle=':')
gl.xlocator = mticker.FixedLocator(np.arange(120, 123.1, 1))
gl.ylocator = mticker.FixedLocator(np.arange(29.5, 32.6, 1))
axe1.set_xticks(np.arange(120, 123.1, 1), crs=ccrs.PlateCarree())
axe1.set_yticks(np.arange(29.5, 32.6, 1), crs=ccrs.PlateCarree())
plt.tick_params(top=True,bottom=True,left=True,right=True) #tick刻度显示
plt.tick_params(labeltop=True,labelleft=True,labelright=True,labelbottom=True) #tick标签显示
axe1.xaxis.set_major_formatter(LongitudeFormatter())
axe1.yaxis.set_major_formatter(LatitudeFormatter())
labels = axe1.get_xticklabels() + axe1.get_yticklabels()
[label.set_fontproperties(FontProperties(fname="./font/Times.ttf",size=6)) for label in labels]

关于代码的细节部分可以参考这篇文章,不多赘述了:

https://zhuanlan.zhihu.com/p/372821243爱垂钓的猫:Python气象绘图笔记(三)——地理图

最后在小地图上绘制剖切线,剖切点以及字体:

axe1.plot([lonlist[0], lonlist[-1]], [latlist[0], latlist[-1]], color='red', linewidth=1.5,linestyle='-')
axe1.plot(lonlist[0], latlist[0], marker='o', color='red', markersize=2.5)
axe1.plot(lonlist[-1], latlist[-1], marker='o', color='red', markersize=2.5)
axe1.text(lonlist[0], latlist[0], 'A', fontproperties=FontProperties(fname="./font/Times.ttf", size=8))
axe1.text(lonlist[-1], latlist[-1], 'A'+"'", fontproperties=FontProperties(fname="./font/Times.ttf", size=8))

plot与text是matplotlib的基础函数,参考资料很多也有很多写的很好的,我就不多说了,有疑问可以问我。

7.翻转纵坐标轴绘制

可能有人需要在主图的右侧绘制另一个纵坐标轴,这样可以标识离地高度。如下图所示:

那么首先,需要创建一个翻转y轴,共享x轴:

axe_sub = axe.twinx()

然后设置翻转y轴的范围:

axe_sub.set_ylim(hlist[0],hlist[-1])

接着,设置y轴添加ticks的位置。这一步是必需的,因为离地高度与气压的关系并不是线性的,但是对matplotlib直接添加我们事先准备好的hlist的话,会导致刻度错位。所以要先创建一个刻度的位置:

axe_sub.set_yticks(np.mgrid[hlist[0]:hlist[-1]:complex(str(int(hlist.shape[0])) + 'j')])

这个时候刻度的数值是这样的:

然后我们要将刻度位置的数值替换为之前计算好的数值:

round_hlist=np.around(hlist,-1)
axe_sub.set_yticklabels(round_hlist)

最后和之前一样,添加一下y轴标签,修改下参数:

axe_sub.set_ylabel('离地高度$\mathrm{(m))}$',fontsize=12)
axe_sub.tick_params(labelcolor='black',length=3)
labels=axe_sub.get_xticklabels()+axe_sub.get_yticklabels()
[label.set_fontproperties(FontProperties(fname="./font/Times.ttf",size=8))forlabelinlabels]

终于大功告成啦!最后贴上完整图和全部代码:

importnetCDF4asnc
fromwrfimportto_np,getvar,CoordPair,vertcross,interplevel
importcartopy.crsasccrs
importcartopy.featureascfeat
importmatplotlib.pyplotasplt
importcmaps
importmatplotlibasmpl
importmatplotlib.tickerasmticker
fromcartopy.mpl.tickerimportLongitudeFormatter,LatitudeFormatter
frommatplotlib.font_managerimportFontProperties
importnumpyasnp

Simsun=FontProperties(fname="./font/SimSun.ttf")
Times=FontProperties(fname="./font/Times.ttf")
mpl.rcParams['axes.unicode_minus']=False
config={
"font.family":'serif',
"mathtext.fontset":'stix',
"font.serif":['SimSun'],
}
mpl.rcParams.update(config)

#初始数据
big_p,small_p,interval_p=1000,700,50
start_lon,end_lon,interval_lon=121,122,0.2
start_lat,end_lat=30.8,31.2
#插值初始点与末点的坐标数据
startpoint=CoordPair(lat=start_lat,lon=start_lon)
endpoint=CoordPair(lat=end_lat,lon=end_lon)
ncfile=nc.Dataset('D:\wrf_simulation\\2meic\\wrfout_d03_2016-07-21_12_2meic')
#读取及初步处理数据
o3=getvar(ncfile,'o3',timeidx=126)
o3=o3*1000/22.4*48*273.15/(getvar(ncfile,'tk',timeidx=126))*(getvar(ncfile,'pressure',timeidx=126))/1013.25
lat=getvar(ncfile,'lat')
lon=getvar(ncfile,'lon')
height=getvar(ncfile,'height')
hgt=getvar(ncfile,'HGT')
height2earth=height-hgt
ua=getvar(ncfile,'ua',timeidx=126)
va=getvar(ncfile,'va',timeidx=126)
wa=getvar(ncfile,'wa',timeidx=126)
wa=wa*10
p=getvar(ncfile,'pressure',timeidx=126)
#插值数据
o3_vert=vertcross(o3,p,wrfin=ncfile,start_point=startpoint,end_point=endpoint,latlon=True)
ua_vert=vertcross(ua,p,wrfin=ncfile,start_point=startpoint,end_point=endpoint,latlon=True)
va_vert=vertcross(va,p,wrfin=ncfile,start_point=startpoint,end_point=endpoint,latlon=True)
wa_vert=vertcross(wa,p,wrfin=ncfile,start_point=startpoint,end_point=endpoint,latlon=True)
#计算风速
ws_vert=np.sqrt(ua_vert**2+va_vert**2)
#计算风向夹角
wdir_vert=np.arctan2(va_vert,ua_vert)*180/np.pi
line_angel=np.arctan2(end_lat-start_lat,end_lon-start_lon)*180/np.pi
vl_angel=wdir_vert-line_angel
#vl_angel = np.cos(vl_angel / 180 * np.pi)
vl_angel=np.cos(np.deg2rad(vl_angel))
ws_vert=ws_vert*vl_angel

lonlist,latlist,hlist=[],[],[]
plist=to_np(va_vert.coords['vertical'])
#生成插值数据的经纬度列表
foriinrange(len(ua_vert.coords['xy_loc'])):
s=str(ua_vert.coords['xy_loc'][i].values)
lonlist.append(float(s[s.find('lon=')+4:s.find('lon=')+12]))
latlist.append(float(s[s.find('lat=')+4:s.find('lat=')+12]))
#插值数据对应气压的离地高度
foriinrange(big_p,small_p-interval_p,-interval_p):
hlist.append(float(np.max(interplevel(height2earth,p,i)).values))
hlist=np.array([int(i)foriinhlist])#简单地取整
str_lonlist,float_lonlist=[],[]
a=np.mgrid[0:len(lonlist)-1:complex(str(int(round((end_lon+interval_lon-start_lon)/interval_lon)))+'j')]#生成位置列表
a=np.around(a,decimals=0)#四舍五入取整
#处理插入x轴的刻度标签
foriinrange(int((end_lon+interval_lon-start_lon)/interval_lon)):
float_lonlist.append(lonlist[int(a[i])])
lo,la=round(lonlist[int(a[i])],2),round(latlist[int(a[i])],2)
str_lonlist.append(str(lo)+'°E'+"\n"+str(la)+'°N')

fig=plt.figure(figsize=(5,5),dpi=150)
axe=plt.subplot(1,1,1)
axe.set_title('垂直剖面图,臭氧浓度与风向',fontsize=12,y=1.05)
axe.set_xlim(start_lon,end_lon)
axe.set_ylim(small_p,big_p)
axe.invert_yaxis()# 翻转纵坐标
axe.grid(color='gray',linestyle=':',linewidth=0.7,axis='y')
plt.xticks(float_lonlist,str_lonlist,fontsize=8,color='k')
axe.set_xlabel('经纬度坐标',fontproperties=Simsun,fontsize=12)
axe.get_xaxis().set_visible('True')
plt.yticks(fontsize=8,color='k')
axe.get_yaxis().set_visible('True')
axe.set_yticks(np.arange(small_p,big_p,interval_p))
axe.set_ylabel('气压$\mathrm{(hPa))}$',fontproperties=Simsun,fontsize=12)
axe.tick_params(length=2)
labels=axe.get_xticklabels()+axe.get_yticklabels()
[label.set_fontproperties(FontProperties(fname="./font/Times.ttf",size=8))forlabelinlabels]

axe.grid(color='gray',linestyle=":",linewidth=0.7,axis='y')

o3_level=np.arange(40,410,20)
contourf=axe.contourf(lonlist,plist,o3_vert,levels=o3_level,cmap=cmaps.NCV_jaisnd,extend='neither')
axe.quiver(lonlist,plist,ws_vert,wa_vert,pivot='mid',
width=0.001,scale=120,color='k',headwidth=4,
alpha=1)

fig.subplots_adjust(right=0.78)
rect=[0.87,0.07,0.01,0.57]# 分别代表,水平位置,垂直位置,水平宽度,垂直宽度
cbar_ax=fig.add_axes(rect)
cb=fig.colorbar(contourf,drawedges=True,ticks=o3_level,cax=cbar_ax,orientation='vertical',spacing='uniform')
cb.set_label('$\mathrm{O_3}$浓度',fontsize=12)
cb.ax.tick_params(length=0)
labels=cb.ax.get_xticklabels()+cb.ax.get_yticklabels()
[label.set_fontproperties(FontProperties(fname="./font/Times.ttf",size=10))forlabelinlabels]

axe1=fig.add_axes([0.8,0.69,0.2,0.2],projection=ccrs.PlateCarree())
axe1.add_feature(cfeat.COASTLINE.with_scale("10m"),linewidth=0.7,color='k')
axe1.add_feature(cfeat.RIVERS.with_scale("10m"))
axe1.add_feature(cfeat.OCEAN.with_scale("10m"))
axe1.add_feature(cfeat.LAKES.with_scale("10m"))
axe1.set_extent([120,123,29.5,32.5],crs=ccrs.PlateCarree())

gl=axe1.gridlines(crs=ccrs.PlateCarree(),draw_labels=False,linewidth=0.5,color='gray',linestyle=':')
gl.xlocator=mticker.FixedLocator(np.arange(120,123.1,1))
gl.ylocator=mticker.FixedLocator(np.arange(29.5,32.6,1))
axe1.set_xticks(np.arange(120,123.1,1),crs=ccrs.PlateCarree())
axe1.set_yticks(np.arange(29.5,32.6,1),crs=ccrs.PlateCarree())
plt.tick_params(top=True,bottom=True,left=True,right=True)#tick刻度显示
plt.tick_params(labeltop=True,labelleft=True,labelright=True,labelbottom=True)#tick标签显示
axe1.xaxis.set_major_formatter(LongitudeFormatter())
axe1.yaxis.set_major_formatter(LatitudeFormatter())
labels=axe1.get_xticklabels()+axe1.get_yticklabels()
[label.set_fontproperties(FontProperties(fname="./font/Times.ttf",size=6))forlabelinlabels]

axe1.plot([lonlist[0],lonlist[-1]],[latlist[0],latlist[-1]],color='red',linewidth=1.5,linestyle='-')
axe1.plot(lonlist[0],latlist[0],marker='o',color='red',markersize=2.5)
axe1.plot(lonlist[-1],latlist[-1],marker='o',color='red',markersize=2.5)
axe1.text(lonlist[0],latlist[0],'A',fontproperties=FontProperties(fname="./font/Times.ttf",size=8))
axe1.text(lonlist[-1],latlist[-1],'A'+"'",fontproperties=FontProperties(fname="./font/Times.ttf",size=8))

axe_sub=axe.twinx()
axe_sub.set_ylim(hlist[0],hlist[-1])
axe_sub.set_yticks(np.mgrid[hlist[0]:hlist[-1]:complex(str(int(hlist.shape[0]))+'j')])
round_hlist=np.around(hlist,-1)
axe_sub.set_yticklabels(round_hlist)
axe_sub.set_ylabel('离地高度$\mathrm{(m))}$',fontsize=12)
axe_sub.tick_params(labelcolor='black',length=3)
labels=axe_sub.get_xticklabels()+axe_sub.get_yticklabels()
[label.set_fontproperties(FontProperties(fname="./font/Times.ttf",size=8))forlabelinlabels]

plt.show()

原文链接:https://zhuanlan.zhihu.com/p/380626604

版权声明

来源:【爱垂钓的猫】的知乎文章内容仅做学术分享之用,不代表本号观点,版权归原作者所有,若涉及侵权等行为,请联系我们删除,万分感谢!
AI多领域融合课程、论文写作、科研绘图类

4月10日-11日、

17日-18日

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表"培训班
3月28日-29日
AI赋能·SCI论文从实验设计到发表全流程实践训练营
3月13日-14日、
20日-21日
一图胜千言-顶刊级科研绘图工坊暨AI支持下Nature级数据可视化高级培训班

3月28日-29日、

4月4日-5日
面向高质量SCI论文标准:深度挖掘遥感时空大数据价值、GeoAI可解释性建模与机理归因及高质量论文产出全链路实践技术培训班
327-28日、
4月3-4

高水平学术论文写作的“破局”之道暨AI人机协同从前沿选题挖掘、智能写作工程、顶刊图表可视化、到精准选刊投稿与审稿博弈策略的一站式实践高级培训班

农林生态、水文、气象、遥感

2月11日-14日

基于LPJ模型的植被NPP模拟、驱动力分析及其气候变化响应预测

4月10日-11日、17日-18日
AquaAI水系统遥感智能监测技术暨60个案例覆盖多源数据处理、水体动态监测、水质AI反演与预警系统开发实践培训班
320-2127日-28日面向科研与产业的智慧农林核心遥感技术与AI实战99案例精讲空天地)多源数据预处理、高光谱AI智能精准提取、多模态模型构建、不确定性分析、WebGIS平台开发及高水平科研论文撰写全流程培训班
3月28日-29日、
4月4日-5日

AI驱动的流域水–碳–氮多过程耦合模拟高级研修班培训班

3月28日-29日、4月4日-5日、11日
“光能智测”太阳能预测技术高级研修班——融合WRF-Solar与多源数据的短-中长期预报实战
3月20日-21日、27日-28日
WRF模拟全技术链实践暨Linux编译排错、FNL/ERA5驱动场处理、长时序模拟配置、下垫面改造与物理参数调整、Python诊断分析及可视化高阶培训班

4月4日-5日

基于统计方法与机器学习技术在气候降尺度中的实践应用培训班
统计、语言、人工智能类
1月30日-2月3
最新AI-Python自然科学领域机器学习与深度学习技术高级培训班
3月14日-15日、21日-22日
AI与Python双驱动计量经济学多源数据处理、机器学习预测及复杂因果识别全流程实战班

科研技术服务

推荐阅读
1、农林生态、大气、遥感、水文等系统教程通道——点击文末"阅读全文"进入
2、地学领域数据、年鉴、地图、课件资料等免费资源下载——点击进入
3、百余门教程在线免费观看——点击文末"阅读全文"进入
4、会员超值福利领取——点击文末"阅读全文"进入
如何加快课题组人才梯队建设与人才培养?

快来Ai尚研修【Easy Scientific  Research】点亮科研简学践行-您的随行导师平台

官 网:www.aishangyanxiu.com;

公众号:关注“Ai尚研修”公众号,点击“Ai尚课堂”进入也可以哦!

Ai尚研修长期招募讲师——诚邀您的加入

Ai尚研修,倾力打造您的专属发展道路,这里有丰富的客户资源,专业的授课平台,强大的推广力度,全员的热血支持!

Ai尚研修期待您的加入,共同打造精品课程,助力科研!

扫描下方二维码,关注我们
Ai尚研修客服
公众号

结束

声明: 本号旨在传播、传递、交流,对相关文章内容观点保持中立态度。涉及内容如有侵权或其他问题,请与本号联系,第一时间做出撤回。

结束

Ai尚研修丨专注科研领域

技术推广,人才招聘推荐,科研活动服务

科研技术云导师,Easy cientfic  Research

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-10 18:47:51 HTTP/2.0 GET : https://f.mffb.com.cn/a/474775.html
  2. 运行时间 : 0.184921s [ 吞吐率:5.41req/s ] 内存消耗:4,886.68kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=3d3cb4dfd4d901125f978ca680d79499
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000502s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000664s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000295s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000348s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000489s ]
  6. SELECT * FROM `set` [ RunTime:0.000192s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000561s ]
  8. SELECT * FROM `article` WHERE `id` = 474775 LIMIT 1 [ RunTime:0.004052s ]
  9. UPDATE `article` SET `lasttime` = 1770720471 WHERE `id` = 474775 [ RunTime:0.000878s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000239s ]
  11. SELECT * FROM `article` WHERE `id` < 474775 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001281s ]
  12. SELECT * FROM `article` WHERE `id` > 474775 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000650s ]
  13. SELECT * FROM `article` WHERE `id` < 474775 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.020150s ]
  14. SELECT * FROM `article` WHERE `id` < 474775 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.027518s ]
  15. SELECT * FROM `article` WHERE `id` < 474775 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.036757s ]
0.186508s