Thanks Jeff!

On Thu, Oct 20, 2011 at 1:16 PM, Jeff Whitaker <jsw...@fastmail.fm> wrote:

>  On 10/19/11 4:37 PM, questions anon wrote:
>
> thank you, I am not quite sure how to 'draw' the shapefile
>
>             from matplotlib.collections import LineCollection
>             ax = plt.gca() # get current axes instance
> # 'DSE_REGIONS' instance variable created by readshapefile method call.
>             lines = LineCollection(map.DSE_REGIONS)
>             ax.add_collection(lines)
>
> -Jeff
>
>
>  but making those changes and removing the shapefile has sped the
> processing up considerably!
> Thank you for your help
>
> On Wed, Oct 19, 2011 at 11:42 PM, Jeff Whitaker <jsw...@fastmail.fm>wrote:
>
>>  On 10/18/11 8:55 PM, questions anon wrote:
>>
>> Thanks Jeff, that certainly speeds it up! But when I take them out of the
>> loop and place them elsewhere they are no longer added to the map.
>> Is there someway I can call them in the loop but still get it to run
>> quickly?
>> Thanks
>>
>>
>>  Just the Basemap instance creation and the transformation of coordinates
>> to projection space should be hoisted out of the loop
>>
>>
>>                 map =
>> Basemap(projection='merc',llcrnrlat=-40,urcrnrlat=-33,
>>
>> llcrnrlon=139.0,urcrnrlon=151.0,lat_ts=0,resolution='i')
>>                 x,y=map(*N.meshgrid(LON,LAT))
>>
>>  you can leave the other statements in.
>>
>> If you still have memory issues, bring the readshapefile call out, and
>> draw the shapes whose coordinates are stored in the instance variable
>> map.DSE_REGIONS manually in the loop.
>>
>> -Jeff
>>
>>
>> On Fri, Oct 14, 2011 at 10:54 PM, Jeff Whitaker <jsw...@fastmail.fm>wrote:
>>
>>   On 10/12/11 8:20 PM, questions anon wrote:
>>
>> Hi All,
>> I keep receiving a memory error when processing many netcdf files. I
>> assumed it had something to do with how I loop things and maybe needed to
>> close things off properly but I recently received an error that made me
>> think it might be because of matplotlib.
>>
>> In the code below I am looping through a bunch of netcdf files (each file
>> is hourly data for one month) and within each netcdf file I am outputting a
>> *png file every three hours. This works for one netcdf file (therefore one
>> month) but when it begins to process the next netcdf file I receive a memory
>> error (see below). Since I have tidied some of my code up it seems to
>> process partly into the second file but then I still receive the memory
>> error.
>> I have tried a few suggestions such as:
>> -Combining the dataset using MFDataset (using NETCDF4) is not an option
>> because the files do not have unlimited dimension.
>> - gc.collect() but that just results in a *GEOS_ERROR: bad allocation
>> error*.
>> -only open LAT and LON once (which worked)
>>
>> System Details:
>> Python 2.7.2 |EPD 7.1-2 (32-bit)| (default, Jul  3 2011, 15:13:59) [MSC
>> v.1500 32 bit (Intel)] on win32
>>
>> Any feedback will be greatly appreciated as I seem to keep ending up with
>> memory errors when working with netcdf files this even happens if I am using
>> a much better computer.
>>
>> *Most recent error: *
>> Traceback (most recent call last):
>>   File "C:\plot_netcdf_merc_multiplot_across_multifolders_TSFC.py", line
>> 78, in <module>
>>     plt.savefig((os.path.join(outputfolder,
>> 'TSFC'+date_string+'UTC.png')))
>>   File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 363, in
>> savefig
>>     return fig.savefig(*args, **kwargs)
>>   File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 1084, in
>> savefig
>>     self.canvas.print_figure(*args, **kwargs)
>>   File
>> "C:\Python27\lib\site-packages\matplotlib\backends\backend_wxagg.py", line
>> 100, in print_figure
>>     FigureCanvasAgg.print_figure(self, filename, *args, **kwargs)
>>   File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line
>> 1923, in print_figure
>>     **kwargs)
>>   File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py",
>> line 438, in print_png
>>     FigureCanvasAgg.draw(self)
>>   File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py",
>> line 393, in draw
>>     self.renderer = self.get_renderer()
>>   File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py",
>> line 404, in get_renderer
>>     self.renderer = RendererAgg(w, h, self.figure.dpi)
>>   File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py",
>> line 59, in __init__
>>     self._renderer = _RendererAgg(int(width), int(height), dpi,
>> debug=False)
>> RuntimeError: Could not allocate memory for image
>>
>> *Error when I added gc.collect()*
>> GEOS_ERROR: bad allocation
>>
>> *Old error (before adding gc.collect() )*
>> *Traceback (most recent call last):
>>   File
>> "d:/plot_netcdf_merc_multiplot_across_multifolders__memoryerror.py", line
>> 44, in <module>
>>     TSFC=ncfile.variables['T_SFC'][1::3]
>>   File "netCDF4.pyx", line 2473, in netCDF4.Variable.__getitem__
>> (netCDF4.c:23094)
>> MemoryError*
>>
>>
>>
>> from netCDF4 import Dataset
>> import numpy as N
>> import matplotlib.pyplot as plt
>> from mpl_toolkits.basemap import Basemap
>> from netcdftime import utime
>> from datetime import datetime
>> import os
>> import gc
>>
>>
>> shapefile1="E:/
>>
>> griddeddatasamples/GIS/DSE_REGIONS"
>> MainFolder=r"E:/griddeddatasamples/GriddedData/InputsforValidation/T_SFC/"
>> OutputFolder=r"E:/griddeddatasamples/GriddedData/OutputsforValidation"
>> fileforlatlon=Dataset("E:/griddeddatasamples/GriddedData/InputsforValidation/T_SFC/TSFC_1974_01/IDZ00026_VIC_ADFD_T_SFC.nc",
>> 'r+', 'NETCDF4')
>> LAT=fileforlatlon.variables['latitude'][:]
>> LON=fileforlatlon.variables['longitude'][:]
>>
>> for (path, dirs, files) in os.walk(MainFolder):
>>     for dir in dirs:
>>         print dir
>>     path=path+'/'
>>     for ncfile in files:
>>         if ncfile[-3:]=='.nc':
>>             print "dealing with ncfiles:", ncfile
>>             ncfile=os.path.join(path,ncfile)
>>             ncfile=Dataset(ncfile, 'r+', 'NETCDF4')
>>             TSFC=ncfile.variables['T_SFC'][1::3]
>>             TIME=ncfile.variables['time'][1::3]
>>             ncfile.close()
>>             gc.collect()
>>
>>             for TSFC, TIME in zip((TSFC[:]),(TIME[:])):
>>                 cdftime=utime('seconds since 1970-01-01 00:00:00')
>>                 ncfiletime=cdftime.num2date(TIME)
>>                 print ncfiletime
>>                 timestr=str(ncfiletime)
>>                 d = datetime.strptime(timestr, '%Y-%m-%d %H:%M:%S')
>>                 date_string = d.strftime('%Y%m%d_%H%M')
>>
>>                 map =
>> Basemap(projection='merc',llcrnrlat=-40,urcrnrlat=-33,
>>
>> llcrnrlon=139.0,urcrnrlon=151.0,lat_ts=0,resolution='i')
>>                 x,y=map(*N.meshgrid(LON,LAT))
>>                 map.drawcoastlines(linewidth=0.5)
>>                 map.readshapefile(shapefile1, 'DSE_REGIONS')
>>                 map.drawstates()
>>
>>                 plt.title('Surface temperature at %s UTC'%ncfiletime)
>>                 ticks=[-5,0,5,10,15,20,25,30,35,40,45,50]
>>                 CS = map.contourf(x,y,TSFC, ticks, cmap=plt.cm.jet)
>>                 l,b,w,h =0.1,0.1,0.8,0.8
>>                 cax = plt.axes([l+w+0.025, b, 0.025, h], )
>>                 cbar=plt.colorbar(CS, cax=cax, drawedges=True)
>>
>>                 plt.savefig((os.path.join(OutputFolder,
>> 'TSFC'+date_string+'UTC.png')))
>>                 plt.close()
>>                 gc.collect()
>>
>>
>>  Try moving these lines
>>
>>
>>                 map =
>> Basemap(projection='merc',llcrnrlat=-40,urcrnrlat=-33,
>>
>> llcrnrlon=139.0,urcrnrlon=151.0,lat_ts=0,resolution='i')
>>                 x,y=map(*N.meshgrid(LON,LAT))
>>                 map.drawcoastlines(linewidth=0.5)
>>                 map.readshapefile(shapefile1, 'DSE_REGIONS')
>>                 map.drawstates()
>>
>>  out of the loop.
>>
>> -Jeff
>>
>>
>>
>>
>
>
------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to