NCAR / pyngl

Other
134 stars 30 forks source link

Ngl contour_map freezing my computer #13

Open mada0007 opened 5 years ago

mada0007 commented 5 years ago

I try running ngl contour plot with this code

from future import print_function import numpy #

Import the masked array module.

# from numpy import ma as MA import os

#

Import Ngl support functions.

# import Ngl

#

Import Nio for a NetCDF reader.

# import Nio

#

To use the ScientificPython module to read in the netCDF file,

comment out the above "import" command, and uncomment the

import line below.

#

from Scientific.IO.NetCDF import NetCDFFile

#

Open the netCDF files, get variables.

# data_dir = Ngl.pynglpath("data") ice1 = Nio.open_file(os.path.join(data_dir,"cdf","/Users/mada0007/Documents/correct_data/spi_3.nc"),"r")

#

This is the ScientificPython method for opening a netCDF file.

#

ice1 = NetCDFFile(data_dir + "/cdf/fice.nc","r")

#

Create a masked array to accommodate missing values in the fice variable.

# fice = ice1.variables["SPI3"] # fice[120,49,100] ficea = fice[:,:,:] fill_value = None if (hasattr(fice,"missing_value")): fill_value = fice.missing_value elif (hasattr(fice,"_FillValue")): fill_value = fice._FillValue fice_masked = MA.transpose(MA.masked_values(ficea,fill_value),(1,2,0))

hlat = ice1.variables["lat"] # hlat[49] hlon = ice1.variables["lon"] # hlon[100]

dimf = fice.shape # Define an array to hold long-term monthly means. ntime = fice.shape[0] nhlat = fice.shape[1] nhlon = fice.shape[2]

nmo = 0 month = nmo+1

icemon = MA.zeros((nhlat,nhlon),dtype=float) for i in range(fice_masked.shape[0]): for j in range(fice_masked.shape[1]): icemon[i,j] = MA.average(fice_masked[i,j,0:ntime:12])

#

Fill the places where icemon is zero with the fill value.

# icemon = MA.masked_values(icemon,0.,rtol=0.,atol=1.e-15) icemon = MA.filled(icemon,fill_value)

                   # Calculate the January (nmo=0) average.

nsub = 16 # Subscript location of northernmost hlat to be plotted.

cmap = numpy.array([ \ [1.00,1.00,0.50], [0.00,0.00,0.50], [0.50,1.00,1.00], \ [0.50,0.00,0.00], [1.00,0.00,1.00], [0.00,1.00,1.00], \ [1.00,1.00,0.00], [0.00,0.00,1.00], [0.00,1.00,0.00], \ [1.00,0.00,0.00] ],dtype=float)

wks_type = "png" wks = Ngl.open_wks(wks_type,"ngl09p")

resources = Ngl.Resources()

Add a longitude cyclic point

icemonnew,hlonnew = Ngl.add_cyclic(icemon[0:nsub+1,:],hlon[:])

resources.sfMissingValueV = fill_value resources.cnFillPalette = cmap resources.sfXArray = hlonnew # Necessary for overlay on a map. resources.sfYArray = hlat[0:nsub+1] resources.tiMainString = "CSM Y00-99 Mean Ice Fraction Month ={}".format(month)

resources.pmTickMarkDisplayMode = "Never"

map = Ngl.contour_map(wks,icemonnew,resources) # Draw a contour

over a map.

nmos = 12 # Specify the number of months in the loop (max 120). for nmo in range(1,nmos): month = nmo+1 for i in range(fice_masked.shape[0]): for j in range(fice_masked.shape[1]): icemon[i,j] = MA.average(fice_masked[i,j,nmo:ntime:12]) icemon = MA.masked_values(icemon,0.,rtol=0.,atol=1.e-15) icemon = MA.filled(icemon,fill_value)

resources.tiMainString = "CSM Y00-99 Mean Ice Fraction Month ={}".format(month) map = \ Ngl.contour_map(wks,Ngl.add_cyclic(icemon[0:nsub+1,:]),resources)

del icemon # Clean up. del icemonnew del map

Ngl.end()

Almost the time I use this function, my computer hungs and I have to restart. How can I resolve this? Thanks

KMFleischer commented 4 years ago

Without the clean code and the data it is hard to tell what is going wrong.

Put a few prints in your code to see how long each part run (you use a few for statements with average) and where it blocks your computer.