R語言、Python、MeteoInfo及Matlab繪製等值線圖

2021-12-26 氣象匯

1、Matlab繪製等值線圖

註:南海小地圖請參考往期推文自行修改

clc;clear;close allf_hgt = 'F:/Rpython/lp8/ETOPO2v2g_f4.nc';lon=ncread(f_hgt,'x');lat=ncread(f_hgt,'y');h=ncread(f_hgt,'z');% plot出圖m_proj('Equidistant Cylindrical','long',[70 140],'lat',[15 55]);m_contourf(lon,lat,h',50,'linestyle','none');% 白化lon2 = [70 140];lat2 = [15 55];m_maskmap('F:/RMatlab/lp1/data/bou2_4p.shp',true,'lon',lon2,'lat',lat2,'m_map',true);hold onma=shaperead('F:/RMeteoInfo/data/map/bou2_4l.shp'); m_line([ma(:).X],[ma(:).Y],'color','k');%繪製範圍內的地圖m_grid('linestyle','none','box','fancy','fontsize',11,'tickdir','in','xtick',[70:10:140],'ytick',[15:10:55]);c=colorbar('eastoutside','ticklength',0);caxis([0,8000])% 調用ncl色帶load('colorbar-mat/BkBlAqGrYeOrReViWh200_r.mat');colormap(BkBlAqGrYeOrReViWh200_r);% 調整colorbarax = gca;axpos = ax.Position;c.Position(3) = 0.5*c.Position(3);ax.Position = axpos;cbarrow;m_contour(lon,lat,h',[4000 6000],'ShowText','on','linestyle','-','linecolor','k');% 白化lon2 = [70 140];lat2 = [15 55];m_maskmap('F:/RMatlab/lp1/data/bou2_4p.shp',true,'lon',lon2,'lat',lat2,'m_map',true);hold onm_line([ma(:).X],[ma(:).Y],'color','k');%繪製範圍內的地圖m_grid('linestyle','none','box','fancy','fontsize',11,'tickdir','in','xtick',[70:10:140],'ytick',[15:10:55]);

2、R語言繪製等值線圖

註:其餘兩種白化方法請參考往期推文自行修改

library(ncdf4)library(ggplot2)library(ggspatial)bom <- nc_open("F:/Rpython/lp8/ETOPO2v2g_f4.nc")lon <- ncvar_get(bom, "x")lat <- ncvar_get(bom, "y")h <- ncvar_get(bom, "z")dimnames(h) <- list(lon, lat)library(tidyverse)library(RColorBrewer)library(reshape2)m <- h[,] %>%      melt(varnames = c("lon", "lat")) %>%      subset(!is.na(h))henan_shp <- "F:/Rpeng/32/data/henan.json"henan <- sf::read_sf(henan_shp)library(sf)m_df <-  st_as_sf(m,coords = c("lon", "lat"),crs = 4326)head(m_df)mask_region <- st_intersection(m_df,st_make_valid(henan))pal8 <- c("#33A02C", "#B2DF8A", "#FDBF6F", "#1F78B4", "#999999", "#E31A1C", "#E6E6E6", "#A6CEE3")henan <- ggplot()+geom_sf(data = mask_region,aes(color=value))+  geom_sf(data=henan,fill="NA",size=0.5,color="black")+theme_bw()+  scale_color_gradientn(colours=pal8,na.value = "transparent",  breaks = c(0,200,400,600,800,1000,1200,1400,1600,1800,2000),labels = c(0,200,400,600,800,1000,1200,1400,1600,1800,2000),limits = c(0,2000))+  theme(legend.key.height = grid::unit(2.6, "cm"))henan+annotation_scale(location = "bl") +  annotation_north_arrow(location="tr",which_north="false",style=north_arrow_fancy_orienteering)+  theme(axis.ticks.length = unit(0.2,"lines"), axis.ticks = element_line(color='black'),        axis.line = element_line(colour = "black"),axis.title.x=element_blank(),        axis.title.y=element_text(colour='black', size=16,face = "bold",vjust = 3),        axis.text.y=element_text(colour='black',size=16),        axis.text.x=element_text(colour = "black",size = 16,face = "bold",angle = 0,hjust = 0,vjust = 0.5),        plot.margin = margin(t = 5,r = 5,b = 5, l = 16, unit = "pt"),        text = element_text(colour = "black",size = 16,face = "bold"))+theme(panel.border = element_rect(fill=NA,color="black", size=1.1, linetype="solid"))+  geom_contour(data=m,aes(x=lon,y=lat,z=value),colour="white")

3、Python繪製等值線圖

注1:克裡金、反距離權重空間插值請參考往期推文自行修改

注2:南海小地圖請參考往期推文自行修改

import matplotlib.pyplot as pltimport numpy as npimport cartopy.crs as ccrsfrom cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatterimport matplotlibimport gdalimport osfrom cartopy.io.shapereader import Readerfrom cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatterfrom matplotlib import rcParamsconfig={"font.family":'Times New Roman',"font.size":24,"mathtext.fontset":'stix'}rcParams.update(config)ds = gdal.Open('F:/Rpython/lp30/data/China_dem.tif')data = ds.ReadAsArray()gt = ds.GetGeoTransform()proj = ds.GetProjection()xres = gt[1]yres = gt[5]xmin = gt[0] + xres * 0.5xmax = gt[0] + (xres * ds.RasterXSize) - xres * 0.5ymin = gt[3] + (yres * ds.RasterYSize) + yres * 0.5ymax = gt[3] - yres * 0.5ds = Nonexy_source = np.mgrid[xmin:xmax+xres:xres, ymax+yres:ymin:yres]proj= ccrs.PlateCarree()  fig=plt.figure(figsize=(16,12))extent=[70,140,15,55]  ax = fig.add_subplot(1, 1, 1,projection = proj)clevs=np.linspace(-200,7600,1000)map_car=ax.contourf(xy_source[0,::],xy_source[1,::],data.T,np.arange(-200,7600,1000),transform=ccrs.PlateCarree(),cmap='gist_rainbow',extend='both')map_car2=ax.contour(xy_source[0,::],xy_source[1,::],data.T,levels=[3500],colors='k')b=plt.colorbar(map_car,shrink=0.66,orientation='vertical',pad=0.035,aspect=20,extend='both')ax.set_extent(extent,crs = ccrs.PlateCarree())ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label=True))ax.yaxis.set_major_formatter(LatitudeFormatter())ax.set_xticks(np.arange(70,140.1,10),crs=ccrs.PlateCarree())ax.set_yticks(np.arange(15,55.1,10),crs=ccrs.PlateCarree())SHP = 'F:/Rpython/lp27/data/'ax.add_geometries(Reader(os.path.join(SHP,'china2.shp')).geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=1)ax0 = plt.gca()   ax0.outline_patch.set_linewidth(1)    plt.savefig('F:/Rpython/lp30/plot26.png',dpi=600)plt.show()

4、MeteoInfo繪製等值線圖

註:其餘參數設定請參考官網自行修改

fn = 'F:/RMeteoInfo/data/data2/dixing-china.nc'f = addfile(fn)data = f['z'][:,:] ax=axesm(tickfontsize=16,axis=True)world = shaperead('F:/RMeteoInfo/data/map/country1.shp') lchina = shaperead('F:/RMeteoInfo/data/map/bou2_4p.shp')lchina2 = shaperead('F:/RMeteoInfo/data/map/bou2_4l.shp')geoshow(lchina,edgecolor='k',size=0.8)bou1_layer=geoshow(lchina2,edgecolor='k',size=0.6)levels = arange(0, 8000, 1000)layer = imshowm(data,levels,cmap='temp_diff_18lev')masklayer(lchina, [layer])layer2 = contour(data,color='k',smooth=False)masklayer(lchina, [layer2])colorbar(layer,orientation='horizontal',ticklen=0,extendrect=False,shrink=1,aspect=50,label='Height(m)',bold=True,fontsize=15)yaxis(tickvisible=True,location='left',tickwidth=2,linewidth=2,ticklength=3) yaxis(tickvisible=False,location='right',tickwidth=2,linewidth=2,ticklength=4) xaxis(tickvisible=False,location='top',tickwidth=2,linewidth=2,ticklength=4) xaxis(tickvisible=True,location='bottom',tickwidth=2,linewidth=2,ticklength=3)xlim(70,140)ylim(15,55)xticks(arange(70, 142, 10),bold=True,fontsize=15)yticks(arange(15, 56, 10),bold=True,fontsize=15)xlabel('Longitude',bold=True,fontsize=15)ylabel('Latitude',bold=True,fontsize=15)ax.scale_bar(0.3,0.38,width=200,linewidth=1,bold=True,fontsize=12,bartype='alternating_bar')ax.north_arrow(0.3,0.9,width=40,height=40,linewidth=1,bold=True,fontsize=12)axesm(position=[0.648,0.273,0.15,0.2], axison=False, frameon=True)geoshow(lchina,edgecolor='k',size=0.8)bou1_layer=geoshow(lchina2,edgecolor='k',size=0.6)levels = arange(0, 8000, 1000)layer = imshowm(data,levels,cmap='temp_diff_18lev')masklayer(lchina, [layer])xlim(106, 123)ylim(2, 23)savefig('F:/RMeteoInfo/test/plot90.png',dpi=800)

相關焦點

  • R語言、Matlab、MeteoInfo、Python及ArcGis可視化DEM地形圖
    一、R語言可視化DEM地形圖-往期推文超連結:1
  • 氣象數據處理工具—MeteoInfoLab和MeteoInfoMap
    MeteoInfo官網:http://www.meteothink.org
  • 使用matplotlib繪製等值線圖
    等值線圖等值線圖或等高線圖在科學界很常用。這種可視化方法用由一圈圈封閉的曲線組成的等值線圖表示三維結構的表面,其中封閉的曲線表示的是一個個處於同一層級或z值相同的數據點。雖然等值線圖看上去結構很複雜,其實用matplotlib實現起來並不難。
  • python學習筆記:同時畫多圖,折線圖,箱線圖,條形圖,柱狀圖等
    紅色bar(x,y1,bottom=y,color='r')#箱線圖subplot(2,3,5)boxplot(x)#散點圖subplot(2,3,6)scatter(x,y)#將六個子圖在一張圖紙中同時展示
  • 值得收藏 | 如何用matlab做出酷炫的圖像
    %plot3函數繪圖示例t = 0:pi/50:10*pi;subplot(1,2,1);plot3(sin(t),cos(t),t,'r*-');xlabel('sin(t)');ylabel('cos(t)');zlabel('t');title('figure1:helix');%繪製多條曲線x = linspace(0,3*pi,200
  • MATLAB入門(下)
    load:加載matlab.mat中所有的變量,如果文件不存在則返回錯誤。load filename:加載指定文件filename中的所有變量,加載時根據文件後綴確定文件的讀入方式。*sin(2*t+3);y1 = exp(-t/3);%繪製曲線plot(t,y,'b:*',t,y1,'r-')xlabel('t');ylabel('y');title('Linestyle and markers');legend('y=exp(-t/3).
  • python數據可視化--matpltolib繪製箱線圖
    箱線圖,也叫箱形圖,它一般用於顯示一組或多組數據分散情況,反映原始數據分布的特徵。如上圖所示,箱線圖用一個類似「日」字的圖形表示數據分布的特徵,「日」字裡面的橫線表示中位數,即升序排列後排在中間的那個數,中位數上方的橫線是上四分位數,即升序排列後處於75%位置上的數。
  • 梁老師帶你判讀高考地理重點圖表——等值線圖
    導語:等值線圖一直是高考地理中必考內容之一,近兩年高考中除了全國一卷外,二卷、三卷均有不少於兩幅的等值線圖。作為地理學科專業的基礎地圖,等值線圖在題目中主要考察學生獲取和解讀地理信息的能力,以輔助完成答題要求。這類圖表只要掌握其幾個基本特點,讀圖就會變得,so easy~~~~下面,讓梁老師帶你們系統學習吧!
  • R之箱線圖繪製
    16s分析一直在連載,但是最基礎的莫過於alpha多樣性了,但是箱線圖卻不是alpha多樣性的唯一選擇,箱線圖也不是局限於alpha多樣性,這裡藉助
  • 用R也可以跑Python了
    但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。後果是,寫個for loop還出bug真的是家常便飯。報警!通過使用repl_python()函數,可以使Python和R交互。
  • R語言中使用boxplot函數繪製箱線圖
    箱線圖簡介箱線圖又稱箱形圖或盒須圖,該圖是由5個特徵值繪製而成的圖形。5個特徵值是變量的最大值、最小值、中位數、第1四分位數和第3四分位數。連接兩個分位數畫出一個箱子,箱子用中位數分割,把兩個極值點與箱子用線條連接,即成箱線圖。
  • 用R也可以跑Python了
    但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。後果是,寫個for loop還出bug真的是家常便飯。報警!面對這種困境的絕不止你一個人!最近的KDnuggets Analytics的軟體調查中,Python和R位居數據科學和機器學習軟體的前兩名。
  • rPython:在R語言中調用python命令
    目錄      rPython簡介      rPython安裝介紹      rPython使用介紹rPython簡介rPython包用於在R語言環境中調用Python命令。通過使用rPython,可以實現將數據傳輸給Python,從Python中獲取數據,也可以調用Python的函數及命令,實現R與python互通。對於R語言來說,Python中存在很多優秀的模塊,而開發者們也想將這些功能在R語言中實現時,則可以利用rpython函數調用python模塊,從而時R語言的到更好的擴展。
  • python中調用MATLAB程序
    cmd = 'matlab -nodesktop -nosplash -r ma_py';# 已經配置好配置MATLAB的情況下,-r 後邊就是要執行的MATLAB文件,ma_py是MATLAB的』.m』文件。os.system(cmd);# 運行MATLAB函數,函數system()是運行後面的函數。
  • Python是這樣調用matlab程序的!
    它常被暱稱為膠水語言,能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕鬆地聯結在一起。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中 有特別要求的部分,用更合適的語言改寫,比如3D遊戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而後封裝為Python可以調用的擴展類庫。
  • MATLAB繪製雙y軸圖形兩種方法
    ,'MarkerFaceColor','r');%以下兩行分別設置v數據y1,y2的間距大小set(ax(1),'yTick',[-1:0.2:1]);set(ax(2),'yTick',[-1:0.1:1]);使用兩個 y 軸在一個圖上繪製兩個數據集。
  • R語言繪製箱線圖示例
    R啟動時默認加載了boxplot()命令,可用於繪製箱線圖。我們使用boxplot()繪製箱線圖展示chao1指數在c分組中的分布,如下示例。##boxplot() 箱線圖,詳情使用 ?#將各數據值以抖動散點的方式添加在箱線圖中,同時繪製凹槽ggplot(alpha3, aes(x = group2, y = value, fill = group1)) +geom_boxplot(fill
  • Python可視化庫解析
    1.matplotlibMatplotlib是一個Python 2維繪圖庫,已經成為python中公認的數據可視化工具,通過Matplotlib你可以很輕鬆地畫一些或簡單或複雜地圖形,幾行代碼即可生成線圖、直方圖、功率譜、條形圖、錯誤圖、散點圖等等。
  • 工科神器matlab高校遭禁用,網友:關我p事,python可取而代之
    學過理工科的都知道,matlab可是做科研、做實驗的神器;通過matlab編程,不僅可以數學建模,還可以做人工智慧、深度學習;不僅可以用於數值計算,還可以用於繪製圖表,被一度認為是計算機學科、材料學科等必須掌握的技能。
  • MATLAB的feather函數繪製箭頭圖
    V] = pol2cart(th,r);feather(U, V)pol2cart(th,r);f = feather(U, V, 'r--');電子書推薦(一)《MATLAB在數學建模中的應用》電子書推薦(二)《Matlab 從入門到精通 》電子書推薦(三)《運籌學基礎及其MATLAB應用》電子書推薦(四)MATLAB、Simulink系統仿真超級學習手冊3、MATLAB繪製圖形Matlab中plot函數全功能解析matlab中legend函數的用法