日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

element ui 批量删除之后动态更新列表_气象编程 | Python高效批量绘图方法

發(fā)布時間:2025/3/19 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 element ui 批量删除之后动态更新列表_气象编程 | Python高效批量绘图方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
添加新云天氣象主編微信或QQ:130188121,及時獲取或發(fā)布?xì)庀笊龑W(xué)、就業(yè)、會議、征稿及學(xué)術(shù)動態(tài)信息!在數(shù)值預(yù)報后處理中經(jīng)常需要批量出圖,而基于matplotlib的圖形渲染速度較慢,而提高出圖的速度通常可通過兩個方面來解決:
  • 多進(jìn)程進(jìn)行繪圖
  • 圖形渲染調(diào)整

多進(jìn)程

在python中使用多進(jìn)程方法加速批量出圖是非常方便的。但這需要電腦有多個核,當(dāng)然對于現(xiàn)代電腦和服務(wù)器而言已經(jīng)不再是問題。可選擇deco和multiprocessing工具解決此問題。deco是對multiprocessing的封裝,使用更加簡單方便。示例:from?deco?import?*@concurrent(processes=4)?# We add this for the concurrent functiondef?process_lat_lon(lat,?lon,?data):?#Does some work which takes a while?return?result@synchronized?# And we add this for the function which calls the concurrent functiondef?process_data_set(data):?results?=?defaultdict(dict)?for?lat?in?range(...):? ?for?lon?in?range(...):? ? ?results[lat][lon] =?process_lat_lon(lat,?lon,?data)?return?results第一個裝飾器中給定了一個參數(shù)processes:表示進(jìn)程數(shù),如果沒有給定,則使用所有的cpu。第一個函數(shù)使用裝飾器@concurrent,第二個函數(shù)使用了裝飾器@synchronized,第二個函數(shù)中調(diào)用了第一個函數(shù)。第二個函數(shù)的裝飾器是可選的,但最好使用裝飾器進(jìn)行封裝。

圖形渲染

以數(shù)值預(yù)報模式的批量出圖過程中的氣象要素空間分布為例。氣象要素的空間分布必然涉及到地理信息的處理,比如添加海岸線、省市邊界線、江流河海等。對于空間分布圖而言,上述的地理信息是不變的。因此在批量出圖時,相同地理范圍的圖可以使用相同的背景圖。以溫度的空間分布為例,這里所說的背景圖是除了溫度的空間分布外的海岸線、省市邊界線、軸的標(biāo)注等信息。在繪圖的時候都是按照圖層進(jìn)行先后疊加的,而疊加后的圖層是可以刪除的。批量出圖時只需要將會變的信息清空,然后在背景圖上疊加新的信息即可。這樣,就能節(jié)省繪制地圖的時間,每次只需要繪制一次地圖即可。想想如果需要批量生成的圖數(shù)量很多的話,這樣就能節(jié)省很多時間。

刪除圖層操作

對于matplotlib.contour類函數(shù)而言,刪除操作如下:con?=?ax.contourf(lon,?lat,?temp)for?coll?in?con.collections:? ?coll.remove()

線或者文本操作

lines?=?ax.plot(a,?y)l?=?lines.pop(0)l.remove()對于文本操作而言,以設(shè)置標(biāo)題為例:at?=?ax.set_title('Test')at.remove()會出現(xiàn)以下錯誤信息:NotImplementedError:?cannot?remove?artist搜索了很久沒找到解決辦法,也就沒有嘗試。但可以通過更新文本的方式覆蓋原先的文本信息,比如:ax.set_title(None)這樣就能解決上述問題了。當(dāng)然也可以使用如下方式:ax.set_visible(False)

測試對比

整個循環(huán)批量出圖需要對9個變量,輸出4725張圖。以下性能測試分析僅選取一個變量,繪制7張圖。

單核對比

time kernprof?-l?plot.pyreal0m31.441suser1m22.964ssys0m1.092sLine?# ? ? Hits ? ? ? ? Time Per Hit ? % Time Line Contents==============================================================? ??63?? ? ? ??7?? ??250148.0 ?35735.4 ? ? ?0.8 ? ? fig, ax?=?plt.subplots(figsize=(12,?9))? ??64?? ? ? ??7?? ? ? ?273.0 ? ??39.0 ? ? ?0.0 ? ? m?=?Basemap(llcrnrlon=lon[0,0],?llcrnrlat=lat[0,0],? ??65?? ? ? ??7?? ? ? ?163.0 ? ??23.3 ? ? ?0.0 ? ? ? ? ? ? ? ? ?urcrnrlon=lon[-1,-1],?urcrnrlat=lat[-1,-1],? ??66?? ? ? ??7?? ? ? ??14.0 ? ? ?2.0 ? ? ?0.0 ? ? ? ? ? ? ? ? ?projection='lcc',?resolution='l',? ??67?? ? ? ??7?? ? ? ??15.0 ? ? ?2.1 ? ? ?0.0 ? ? ? ? ? ? ? ? ?lat_1=30,?lat_2=60,? ??68?? ? ? ??7???15828248.0?2261178.3 ? ??52.2 ? ? ? ? ? ? ? ? ?lat_0=33.5,?lon_0=106)? ??69?? ? ? ??7?? ? ? ??43.0 ? ? ?6.1 ? ? ?0.0 ? ? shp?=?m.readshapefile('shps/cnhimap',?'china',? ??70?? ? ? ??7?? ?3270262.0?467180.3 ? ??10.8 ? ? ? ? ? ? ? ? ? ?linewidth=1.5,?color='k',?ax=ax)? ??71?? ? ? ??7?? ? ? ??28.0 ? ? ?4.0 ? ? ?0.0 ? ? hb ?=?m.readshapefile('shps/hb',?'hebei',? ??72?? ? ? ??7?? ??348692.0 ?49813.1 ? ? ?1.1 ? ? ? ? ? ? ? ? ? ? ? ? ? ?linewidth=1.5,?color='blue',?ax=ax)? ??73?? ? ? ??7?? ? ?55085.0 ??7869.3 ? ? ?0.2 ? ? x, y?=?m(lon, lat)? ??74? ??75?? ? ? ??7?? ? ? ?107.0 ? ??15.3 ? ? ?0.0 ? ? con?=?m.contourf(x, y, aqid, np.arange(rangs[0], rangs[-1]+1,?1),? ??76?? ? ? ??7?? ? ? ??16.0 ? ? ?2.3 ? ? ?0.0 ? ? ? ? ? ? ? ? ? ? ??vmin=rangs[0],?vmax=rangs[-1],?norm=aqi_norm,? ??77?? ? ? ??7?? ?2528715.0?361245.0 ? ? ?8.3 ? ? ? ? ? ? ? ? ? ? ??cmap=aqi_cmap,?extend=extend,?ax=ax)? ??78? ??79?? ? ? ??7?? ? ? ??29.0 ? ? ?4.1 ? ? ?0.0 ? ? m.drawparallels(yticks,?labels=[1,0,0,0],?linewidth=0.5,? ??80?? ? ? ??7?? ??464004.0 ?66286.3 ? ? ?1.5 ? ? ? ? ? ? ? ? ? ? ?ax=ax,?fmt=lat2str,?fontdict=dict(fontsize=FT))? ??81?? ? ? ??7?? ? ? ??25.0 ? ? ?3.6 ? ? ?0.0 ? ? m.drawmeridians(xticks,?labels=[0,0,0,1],?linewidth=0.5,? ??82?? ? ? ??7?? ??317093.0 ?45299.0 ? ? ?1.0 ? ? ? ? ? ? ? ? ? ? ?ax=ax,?fmt=lon2str,?fontdict=dict(fontsize=FT))? ??83?? ? ? ??7?? ? ?23429.0 ??3347.0 ? ? ?0.1 ? ? m.drawcoastlines()通過性能分析結(jié)果可以看出:創(chuàng)建 map 占據(jù)了超過一半的時間,占比52.2%,而添加地圖邊界占比11.9%,添加軸標(biāo)注占比2.5%。而這些都屬于背景圖的信息,只需要創(chuàng)建一次即可。將背景圖信息的部分單獨(dú)拿出來,只創(chuàng)建一次,每次在背景圖上添加新圖層,新的圖存儲后將添加的圖層刪除,然后重復(fù)利用。以下是優(yōu)化后代碼的執(zhí)行結(jié)果:time kernprof?-l?plot_eff.pyreal0m14.141suser0m21.010ssys0m0.670s相比于之前運(yùn)行的31s,優(yōu)化后的代碼運(yùn)行時間只有14s,速度提升了超過50%。

多核對比

多核并行運(yùn)行采用deco工具,使用3個核進(jìn)行測試。time python plot.pyreal0m11.224suser0m55.686ssys0m1.610s猜測可能是只創(chuàng)建了一個figure對象,導(dǎo)致在使用多進(jìn)程傳遞對象時出現(xiàn)了混亂,從而導(dǎo)致出現(xiàn)問題。而后對代碼進(jìn)行了改進(jìn),僅將創(chuàng)建map的代碼放到了循環(huán)之外,只創(chuàng)建一次地圖。畢竟創(chuàng)建地圖的代碼的時間占比就超過了50%,其余部分占比較低,改動此項仍能大幅節(jié)省畫圖時間。測試單背景圖的多核時出現(xiàn)了問題,figure.canvas 為 NoneType,導(dǎo)致出錯:AttributeError: 'NoneType' object has no attribute 'print_figure'以下是改進(jìn)后的3個核的運(yùn)行效率,相比于原始腳本而言,仍然提升了35%。time python plot_eff.pyreal0m7.274suser0m20.875ssys0m0.857s

注意事項

通過圖形渲染流程來優(yōu)化繪圖時需要注意:matplotlib在繪圖的時候如果使用subplots創(chuàng)建Figure對象,添加colorbar的時候,圖形對象會進(jìn)行自適應(yīng),刪除colorbar之后axes的位置并不會自動適應(yīng)到原始位置,此時如果添加新的圖層和colorbar,會導(dǎo)致新的Figure對象中的axes的位置再次縮小。每重復(fù)一次刪除/更新操作,axes的位置會縮小一些,重復(fù)越多,axes越小。解決方法如下:可通過如下方式創(chuàng)建Figure圖像,固定contourf的axes和colorbar的axes,這樣每次刪除/更新新圖層時就不會出現(xiàn)上述問題。fig?=?plt.Figure(figsize=(12,?9))ax?=?fig.add_axes([0.12,?0.11,?0.64,?0.77])cax?=?fig.add_axes([0.78,?0.2,?0.022,?0.6])當(dāng)然,subplots應(yīng)該也有自適應(yīng)的方式,但是嘗試了很多方法都沒有實(shí)現(xiàn),暫時先放下了。嘗試了更新axes的位置,然后更新圖形:gp?=?ax.get_position()ax.set_position(gp)ax.autoscale()ax.relim()fig.canvas.draw()

參考鏈接

  • https://stackoverflow.com/questions/27345157/matplotlib-how-to-remove-just-one-contour-element-from-axis-with-other-plotted
  • https://stackoverflow.com/questions/4981815/how-to-remove-lines-in-a-matplotlib-plot
  • https://stackoverflow.com/questions/21565445/matplotlib-says-fig-canvas-is-none-so-i-cant-use-fig-canvas-draw
  • 往期回顧:

  • 氣象招聘 | 深圳防雷協(xié)會代招聘兩則

  • 定了!新聞聯(lián)播已播出!碩士研究生招生規(guī)模要擴(kuò)大!!

  • 專題報道 | 廣東海洋大學(xué)海洋與氣象學(xué)院人才引進(jìn)需求和政策簡介

  • 新云天氣象公眾號聯(lián)系人微信/QQ:130188121
  • 2020屆氣象本科生考研復(fù)試QQ群:930107262
  • 2020大氣與海洋春季招聘會QQ群:346577427
  • 2021屆氣象本科考研與就業(yè)QQ群:639522239
  • 2021屆氣象研究生畢業(yè)就業(yè)QQ群:696948743

總結(jié)

以上是生活随笔為你收集整理的element ui 批量删除之后动态更新列表_气象编程 | Python高效批量绘图方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 九九国产 | 中文字幕一区在线 | 日韩午夜伦 | 成人在线观看视频网站 | 91最新国产 | 久久五月综合 | 韩国三级一区 | 精品中文字幕在线 | 免费网站www在线观看 | 一级色视频 | 91在线视频免费 | 超碰老司机 | www免费视频 | 那里可以看毛片 | 五月激情开心网 | av片亚洲 | 不卡视频一区二区 | 免费看黄在线网站 | 久久国产主播 | www,四虎 | 丰满少妇乱子伦精品看片 | 免费一级黄色大片 | 日本女人一级片 | 欧美乱视频 | 成人av图片 | 国产不卡av在线播放 | 成人黄色小视频 | 午夜激情福利在线 | www.天堂在线| 黄色片网站免费看 | 成人依人 | 一级裸体片 | 少妇被爽到高潮动态图 | 少妇高潮一区二区三区99欧美 | 嫩草影院在线免费观看 | 日本中出视频 | 男生操女生在线观看 | 免费视频成人 | 放几个免费的毛片出来看 | 男生操女生在线观看 | 日韩精选av | 温柔女教师在线观看 | 亚洲熟妇无码乱子av电影 | 最近日韩中文字幕 | mm1313亚洲国产精品美女 | 日韩精品视频免费在线观看 | 色播一区二区 | 久久激情五月 | www.亚洲.com| 69xx视频在线观看 | 3d动漫精品啪啪一区二区下载 | 美女扒开腿让男人 | 国产精品v亚洲精品v日韩精品 | 国产精品羞羞答答在线观看 | 成人在线高清视频 | 国内自拍偷拍视频 | 日韩欧美在线观看 | 日日碰狠狠躁久久躁蜜桃 | 无码人妻久久一区二区三区不卡 | 青青视频网站 | 丰满岳乱妇国产精品一区 | 亚洲少妇网 | 五月开心激情 | 国产人人看 | 又色又爽又黄gif动态图 | www天天干| 日日干天天射 | 好逼天天操 | 最近中文在线观看 | 伊人干综合 | 天天射网站| 亚洲理论片在线观看 | 成人午夜网 | 久久艹国产精品 | 东北少妇露脸无套对白 | 日本激情视频在线观看 | 密臀久久 | 国产日比视频 | 强睡邻居人妻中文字幕 | 国产精品久线在线观看 | 日产精品一区 | 亚洲综合图 | 国产精品国产馆在线真实露脸 | 国产女同在线观看 | 99热精品在线播放 | 538任你躁在线精品免费 | 这里只有精品视频 | 国产一二三视频 | 精品视频导航 | 国产丝袜久久 | 国产原创一区 | 在线看91| 午夜精品在线观看 | 国产精品不卡在线观看 | 欧美乱日 | 天天干天天干天天操 | 日韩人妻精品中文字幕 | 狠狠干在线观看 | 国产亚洲精品成人无码精品网站 |