簡體   English   中英

使用python從netCDF提取和繪制數據

[英]Use python to extract and plot data from netCDF

對於使用python采集科學數據,我是陌生的,因此如果尚不清楚,請事先道歉。 我有一個netCDF4文件,其中包含多個變量,包括緯度,經度和密度。 我試圖僅使用35-40 N和100-110 W之間坐標的密度值在matplotlib底圖上繪制可變密度。

import numpy as np
import netCDF4 as nc
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

in: f = nc.Dataset('C:\\Users\\mdc\\data\\density.nc', 'r')

in: f.variables['latitude'].shape
out:(120000,)

(變量經度和密度具有相同的形狀)

我一直試圖尋找一種方法來僅提取符合[35 <lat <40&-110 <lon <-100]准則的緯度和經度坐標對(及其關聯的密度值)。 任何建議如何做到這一點將不勝感激。

我嘗試提取每個相關變量並將其編譯為2d數組,但我還沒有弄清楚如何僅選擇所需的數據。

lats = f.variables['latitude'][:]
lons = f.variables['longitude'][:]
dens = f.variables['density'][:]
combined = np.vstack((lats,lons,dens))

in: combined
out: array([[ -4.14770737e+01,  -3.89834557e+01,  -3.86000137e+01, ...,
      4.34283943e+01,   4.37634315e+01,   4.40338402e+01],
   [  1.75510895e+02,   1.74857147e+02,   1.74742798e+02, ...,
      7.83558655e+01,   7.81687775e+01,   7.80410919e+01],
   [  7.79418945e-02,   7.38342285e-01,   9.94934082e-01, ...,
      5.60119629e-01,  -1.60522461e-02,   5.52429199e-01]], dtype=float32)

至於繪圖,我試圖根據它們的密度值,用不同的顏色而不是尺寸來繪制坐標對。

m = Basemap(projection='robin', resolution='i', lat_0 = 37, lon_0 = -105)
m.drawcoastlines()
for lats,lons,dens in zip(lats,lons,dens):
    x,y = m(lats,lons)
    size = dens*3
    m.plot(x,y, 'r', markersize=size)
plt.show()

使用pandas進行數據選擇(抱歉,無法在此處安裝netCDF,pandas令人滿意):

import pandas as pd
tinyd = pd.DataFrame(np.array(
  [[ -4.14770737e+01,  -3.89834557e+01,  -3.86000137e+01,
      4.34283943e+01,   4.37634315e+01,   4.40338402e+01],
   [  1.75510895e+02,   1.74857147e+02,   1.74742798e+02,
      7.83558655e+01,   7.81687775e+01,   7.80410919e+01],
   [  7.79418945e-02,   7.38342285e-01,   9.94934082e-01,
      5.60119629e-01,  -1.60522461e-02,   5.52429199e-01]]).T,
      columns=['lat','lon','den'])

mask =  (tinyd.lat > -39) & (tinyd.lat < 44) & \
        (tinyd.lon > 80) & (tinyd.lon < 175)

toplot = tinyd[mask]
print(toplot)
  lat lon den 1 -38.983456 174.857147 0.738342 2 -38.600014 174.742798 0.994934 
plt.scatter(toplot.lat, toplot.lon, s=90, c=toplot.den)
plt.colorbar()

在此處輸入圖片說明

在底圖的頂部進行繪制是相同的,您可以指定其他顏色圖,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM