You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
(12) |
Sep
(12) |
Oct
(56) |
Nov
(65) |
Dec
(37) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(59) |
Feb
(78) |
Mar
(153) |
Apr
(205) |
May
(184) |
Jun
(123) |
Jul
(171) |
Aug
(156) |
Sep
(190) |
Oct
(120) |
Nov
(154) |
Dec
(223) |
2005 |
Jan
(184) |
Feb
(267) |
Mar
(214) |
Apr
(286) |
May
(320) |
Jun
(299) |
Jul
(348) |
Aug
(283) |
Sep
(355) |
Oct
(293) |
Nov
(232) |
Dec
(203) |
2006 |
Jan
(352) |
Feb
(358) |
Mar
(403) |
Apr
(313) |
May
(165) |
Jun
(281) |
Jul
(316) |
Aug
(228) |
Sep
(279) |
Oct
(243) |
Nov
(315) |
Dec
(345) |
2007 |
Jan
(260) |
Feb
(323) |
Mar
(340) |
Apr
(319) |
May
(290) |
Jun
(296) |
Jul
(221) |
Aug
(292) |
Sep
(242) |
Oct
(248) |
Nov
(242) |
Dec
(332) |
2008 |
Jan
(312) |
Feb
(359) |
Mar
(454) |
Apr
(287) |
May
(340) |
Jun
(450) |
Jul
(403) |
Aug
(324) |
Sep
(349) |
Oct
(385) |
Nov
(363) |
Dec
(437) |
2009 |
Jan
(500) |
Feb
(301) |
Mar
(409) |
Apr
(486) |
May
(545) |
Jun
(391) |
Jul
(518) |
Aug
(497) |
Sep
(492) |
Oct
(429) |
Nov
(357) |
Dec
(310) |
2010 |
Jan
(371) |
Feb
(657) |
Mar
(519) |
Apr
(432) |
May
(312) |
Jun
(416) |
Jul
(477) |
Aug
(386) |
Sep
(419) |
Oct
(435) |
Nov
(320) |
Dec
(202) |
2011 |
Jan
(321) |
Feb
(413) |
Mar
(299) |
Apr
(215) |
May
(284) |
Jun
(203) |
Jul
(207) |
Aug
(314) |
Sep
(321) |
Oct
(259) |
Nov
(347) |
Dec
(209) |
2012 |
Jan
(322) |
Feb
(414) |
Mar
(377) |
Apr
(179) |
May
(173) |
Jun
(234) |
Jul
(295) |
Aug
(239) |
Sep
(276) |
Oct
(355) |
Nov
(144) |
Dec
(108) |
2013 |
Jan
(170) |
Feb
(89) |
Mar
(204) |
Apr
(133) |
May
(142) |
Jun
(89) |
Jul
(160) |
Aug
(180) |
Sep
(69) |
Oct
(136) |
Nov
(83) |
Dec
(32) |
2014 |
Jan
(71) |
Feb
(90) |
Mar
(161) |
Apr
(117) |
May
(78) |
Jun
(94) |
Jul
(60) |
Aug
(83) |
Sep
(102) |
Oct
(132) |
Nov
(154) |
Dec
(96) |
2015 |
Jan
(45) |
Feb
(138) |
Mar
(176) |
Apr
(132) |
May
(119) |
Jun
(124) |
Jul
(77) |
Aug
(31) |
Sep
(34) |
Oct
(22) |
Nov
(23) |
Dec
(9) |
2016 |
Jan
(26) |
Feb
(17) |
Mar
(10) |
Apr
(8) |
May
(4) |
Jun
(8) |
Jul
(6) |
Aug
(5) |
Sep
(9) |
Oct
(4) |
Nov
|
Dec
|
2017 |
Jan
(5) |
Feb
(7) |
Mar
(1) |
Apr
(5) |
May
|
Jun
(3) |
Jul
(6) |
Aug
(1) |
Sep
|
Oct
(2) |
Nov
(1) |
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
|
|
|
1
(2) |
2
(4) |
3
(9) |
4
(12) |
5
(12) |
6
(7) |
7
(8) |
8
(4) |
9
(2) |
10
(9) |
11
(6) |
12
(1) |
13
(20) |
14
(13) |
15
(9) |
16
(3) |
17
(12) |
18
(16) |
19
(14) |
20
(12) |
21
(15) |
22
(11) |
23
(5) |
24
(7) |
25
(7) |
26
(8) |
27
(11) |
28
(10) |
29
(1) |
30
(3) |
31
(6) |
|
|
|
|
|
<html dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style id="owaParaStyle">P { MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px } </style> </head> <body fPStyle="1" ocsi="0"> <div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;"> <div> <p>Dear all,</p> <p> </p> <p>I am trying to plot a wind field using the quiver function and would like to color the wind arrows according to the wind strength. I have gone through the online matplotlib material, but have not been able to work out how to do it so far.</p> <p> </p> <p>Would it be possible for someone to give me a hint on how to color the arrows according to the wind strength?</p> <p> </p> <p>I would much appreciate any help with this problem.</p> <p> </p> <p>Best wishes,</p> <p> </p> <p>David</p> <p> </p> <div style="FONT-FAMILY: Tahoma; FONT-SIZE: 13px"> <p><font size="2"> </p> </font></div> </div> </div> </body> </html>
You are right that Agg is doing the resizing here. Agg expects premultiplied alpha. See [1] for information about what that means. [1] http://en.wikipedia.org/wiki/Alpha_compositing After Agg interpolates the pixel values, to prevent oversaturation it truncates all values to be less than alpha (which makes sense if everything is assumed to be premultiplied alpha). Arguably, the bug here is that nearest neighbor (which doesn't have to do any blending) doesn't perform the truncation step -- then both would look "wrong". It happens in this code snippet in span_image_filter_rgba: (base_mask is 255) if(fg[order_type::A] > base_mask) fg[order_type::A] = base_mask; if(fg[order_type::R] > fg[order_type::A]) fg[order_type::R] = fg[order_type::A]; if(fg[order_type::G] > fg[order_type::A]) fg[order_type::G] = fg[order_type::A]; if(fg[order_type::B] > fg[order_type::A]) fg[order_type::B] = fg[order_type::A]; So, the solution to make a partially transparent image is to not do: pix[:,:,3] = 127 but instead, do pix *= 0.5 Of course, the real fix here is to support alpha blending properly in the image class, then the user wouldn't have to deal with such details. A bug should probably be filed in the matplotlib issue tracker for this. Mike On 10/19/2011 12:23 PM, Daniel Hyams wrote: > [Sorry, I keep getting tripped up with HTML mail....resent in ascii, > and resaved one of the attachment png's to make it smaller.] > > > Example script attached (PIL required). Basically, if I impose a > specific value into an image's alpha channel and use any interpolation > scheme other than 'nearest', there appears gray all where the figure > didn't have any color to begin with. I've also attached a screenshot > of the output of the script on my machine. > > Hopefully I'm doing something wrongly? > > I chased the problem and managed to hack in a solution that fixes the > problem, but it's extremely inefficient...basically, in matplotlib's > image.py, routine BboxImage.make_image, you can create two images > there....one with no alpha channel (call it imRGB) and one with (call > it imRGBA). Go through all of the routine, doing exactly the same > things to both of the images *except* for the interpolation, which is > set to 'nearest' for imRGBA. Then, rip the colors out of imRGB, the > alpha channel off of imRGBA, and put them together....go through all > of the routine again with this composited image, and it works. I > know...I told you it was bad ;) > > The problem seems to be in the "resize" call in that routine...resize, > which calls into C code, does not appear to handle things correctly > when the alpha is anything other than 255's across the board. It > might be a problem in the agg routines, but hopefully it is just maybe > a misuse of the agg routines. > > The behavior seems to be backend independent as far as I could test (I > tried with wxagg and tk backends). I am using mpl 1.0.0 on Windows if > it matters. > > > -- > Daniel Hyams > dh...@gm... > > > ------------------------------------------------------------------------------ > All the data continuously generated in your IT infrastructure contains a > definitive record of customers, application performance, security > threats, fraudulent activity and more. Splunk takes this data and makes > sense of it. Business sense. IT sense. Common sense. > http://p.sf.net/sfu/splunk-d2d-oct > > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
[Sorry, I keep getting tripped up with HTML mail....resent in ascii, and resaved one of the attachment png's to make it smaller.] Example script attached (PIL required). Basically, if I impose a specific value into an image's alpha channel and use any interpolation scheme other than 'nearest', there appears gray all where the figure didn't have any color to begin with. I've also attached a screenshot of the output of the script on my machine. Hopefully I'm doing something wrongly? I chased the problem and managed to hack in a solution that fixes the problem, but it's extremely inefficient...basically, in matplotlib's image.py, routine BboxImage.make_image, you can create two images there....one with no alpha channel (call it imRGB) and one with (call it imRGBA). Go through all of the routine, doing exactly the same things to both of the images *except* for the interpolation, which is set to 'nearest' for imRGBA. Then, rip the colors out of imRGB, the alpha channel off of imRGBA, and put them together....go through all of the routine again with this composited image, and it works. I know...I told you it was bad ;) The problem seems to be in the "resize" call in that routine...resize, which calls into C code, does not appear to handle things correctly when the alpha is anything other than 255's across the board. It might be a problem in the agg routines, but hopefully it is just maybe a misuse of the agg routines. The behavior seems to be backend independent as far as I could test (I tried with wxagg and tk backends). I am using mpl 1.0.0 on Windows if it matters. -- Daniel Hyams dh...@gm...
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 <js...@fa... > <mailto:js...@fa...>> 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 > >
Thanks for the comprehensive explanation. So it would seem it's really only the http://matplotlib.sourceforge.net/users/whats_new.html page that is misleading on this. Many thanks! -- View this message in context: http://old.nabble.com/QT-draw-issue-in-1.1.0-and-PyQt4v2-missing--tp32676093p32680797.html Sent from the matplotlib - users mailing list archive at Nabble.com.
On 10/18/2011 09:44 PM, RuiDC wrote: > Benjamin Root-2 wrote: > I think that might have been a little unclear. You should only need > to select 'PyQt4' or 'PySide'. If PyQt4 is selected, then (I think) > the v2 is automatically tested for internally. > > hmm, please explain where you think it is used internally, as the code > seem to expect that this param can be set when there is no env variable > 'QT_API' set, in backends\qt4_compat.py: After quite a bit of thrashing around, we settled on the present system. The rcParam deliberately does *not* set the API version if PyQt4 is used. Whatever your Qt4 comes up with when the backend is imported is what is used. That way there is no conflict with applications that import pyqt4, and perhaps set the API, before importing mpl. If you want to use the v2 api, you can import pyqt4 and set the API yourself before importing mpl. Or, if you want the API to be forced to v2 by mpl when the backend is imported, you can do what ETS does, which is to set the QT_API environment variable to "pyqt". This moderately ugly mess was necessitated by the need to be compatible with ipython, ETS, and existing user code, while dealing with two versions of pyqt4 and one of pyside, and with different default versions of pyqt4 for python 2 and python 3 (which we will be supporting in the not-too-distant future, I believe.) Eric > > # Available APIs. > QT_API_PYQT = 'PyQt4' # API is not set here; Python 2.x default is V 1 > QT_API_PYQTv2 = 'PyQt4v2' # forced to Version 2 API > QT_API_PYSIDE = 'PySide' # only supports Version 2 API > > ETS = dict(pyqt=QT_API_PYQTv2, pyside=QT_API_PYSIDE) > > # If the ETS QT_API environment variable is set, use it. Note that > # ETS requires the version 2 of PyQt4, which is not the platform > # default for Python 2.x. > > QT_API_ENV = os.environ.get('QT_API') > if QT_API_ENV is not None: > try: > QT_API = ETS[QT_API_ENV] > except KeyError: > raise RuntimeError( > 'Unrecognized environment variable %r, valid values are: %r or %r' % > (QT_API_ENV, 'pyqt', 'pyside')) > else: > # No ETS environment, so use rcParams. > QT_API = rcParams['backend.qt4'] > > but trying to set it, via code or matplotlibrc results in: Unrecognized > backend.qt4 string "PyQt4v2": valid strings are ['PySide', 'PyQt4'] > "%s"\n\t%s' % (val, cnt, line, fname, msg)) > ------------------------------------------------------------------------ > View this message in context: Re: QT draw issue in 1.1.0 and PyQt4v2 > missing? > <http://old.nabble.com/QT-draw-issue-in-1.1.0-and-PyQt4v2-missing--tp32676093p32680414.html> > Sent from the matplotlib - users mailing list archive > <http://old.nabble.com/matplotlib---users-f2906.html> at Nabble.com. > > > > ------------------------------------------------------------------------------ > All the data continuously generated in your IT infrastructure contains a > definitive record of customers, application performance, security > threats, fraudulent activity and more. Splunk takes this data and makes > sense of it. Business sense. IT sense. Common sense. > http://p.sf.net/sfu/splunk-d2d-oct > > > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
efiring wrote: > > https://github.com/matplotlib/matplotlib/pull/539 > I think this pull request fixes it. > Eric > Great, thanks for confirming and fixing! Whilst waiting for this to make it into a release, I've hacked this to achieve the same effect (so I don't have to patch + distribute the mpl code): def do_draw_hack(self): fig = self.figure fig.canvas.draw() fig.draw(fig.canvas.get_renderer()) fig.canvas.update() -- View this message in context: http://old.nabble.com/QT-draw-issue-in-1.1.0-and-PyQt4v2-missing--tp32676093p32680445.html Sent from the matplotlib - users mailing list archive at Nabble.com.
Benjamin Root-2 wrote: > > I think that might have been a little unclear. You should only need to > select 'PyQt4' or 'PySide'. If PyQt4 is selected, then (I think) the v2 > is > automatically tested for internally. > hmm, please explain where you think it is used internally, as the code seem to expect that this param can be set when there is no env variable 'QT_API' set, in backends\qt4_compat.py: # Available APIs. QT_API_PYQT = 'PyQt4' # API is not set here; Python 2.x default is V 1 QT_API_PYQTv2 = 'PyQt4v2' # forced to Version 2 API QT_API_PYSIDE = 'PySide' # only supports Version 2 API ETS = dict(pyqt=QT_API_PYQTv2, pyside=QT_API_PYSIDE) # If the ETS QT_API environment variable is set, use it. Note that # ETS requires the version 2 of PyQt4, which is not the platform # default for Python 2.x. QT_API_ENV = os.environ.get('QT_API') if QT_API_ENV is not None: try: QT_API = ETS[QT_API_ENV] except KeyError: raise RuntimeError( 'Unrecognized environment variable %r, valid values are: %r or %r' % (QT_API_ENV, 'pyqt', 'pyside')) else: # No ETS environment, so use rcParams. QT_API = rcParams['backend.qt4'] but trying to set it, via code or matplotlibrc results in: Unrecognized backend.qt4 string "PyQt4v2": valid strings are ['PySide', 'PyQt4'] "%s"\n\t%s' % (val, cnt, line, fname, msg)) -- View this message in context: http://old.nabble.com/QT-draw-issue-in-1.1.0-and-PyQt4v2-missing--tp32676093p32680414.html Sent from the matplotlib - users mailing list archive at Nabble.com.
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 On Fri, Oct 14, 2011 at 10:54 PM, Jeff Whitaker <js...@fa...> 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 following boxplot raises a warning: >>> boxplot([1], whis=float('inf')) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axes.py:5487: RuntimeWarning: invalid value encountered in double_scalars hi_val = q3 + whis*iq I think that it would be nice if it did not, so that users know that things are fine, in this case. :) -- View this message in context: http://old.nabble.com/Error-with-boxplot%28%29-and-%22infinite%22-whiskers-tp32677142p32677142.html Sent from the matplotlib - users mailing list archive at Nabble.com.
On 10/18/2011 06:19 AM, RuiDC wrote: > > As of 1.1.0, FigureCanvasQTAgg.draw() now no longer calls > FigureCanvasAgg.draw(), and as a result I am getting problems with code that > used to update positions/size of legend and labels during on_draw. > > 1. Is there a new way to get the canvas to draw? or is this a bug? I would say it is a bug that has been lurking undetected for 9 months. https://github.com/matplotlib/matplotlib/pull/539 I think this pull request fixes it. Eric > > The "what's new in 1.1.0" page, > http://matplotlib.sourceforge.net/users/whats_new.html refers to: > "An rcParam entry, "backend.qt4", has been added to allow users to select > PyQt4, PyQt4v2, or PySide." > > 2. I cannot see any reference to PyQt4v2 in the code, and any attempt to set > the rcParam to use it results in a param validation error, is this a mistake > in the web page or omission in the code? > > Thanks in advance > RuiDC
Hi All, I would like to ask how I can invoke the interactive option in a gtk GUI. Basically, I have something like this self.figure = Figure(figsize=(8,6), dpi=72) self.axis = self.figure.add_subplot(111) self.axis.plot(x,y) which works, except that I have to explicitly call something like this def refresh_plot(self): self.canvas.draw_idle() while gtk.events_pending(): gtk.main_iteration() My question is, whether it is possible to set interactive(True) or ion() in such a case, so that the plot would be displayed immediately. If that is not the case, is it possible to figure out whether a graph has changed since some point in time? If that is an option, then I could just check for the state of the figure, and if necessary, call the refresh_plot function. Thanks, v923z
On 10/18/2011 06:19 AM, RuiDC wrote: > > As of 1.1.0, FigureCanvasQTAgg.draw() now no longer calls > FigureCanvasAgg.draw(), and as a result I am getting problems with code that > used to update positions/size of legend and labels during on_draw. > > 1. Is there a new way to get the canvas to draw? or is this a bug? The problem is that all drawing is now deferred until a paintEvent occurs. draw() is using the update() method to queue the request for a paintEvent, where all actual drawing is done, consistent with what I understand to be the recommended mode of operation for QT, but maybe not with the way mpl operates; it has the effect of making draw() work like draw_idle(). It looks like what I should do is move the call to FigureCanvasAgg.draw back into the FigureCanvasQTAgg.draw method. I'll give it a try. Eric > > The "what's new in 1.1.0" page, > http://matplotlib.sourceforge.net/users/whats_new.html refers to: > "An rcParam entry, "backend.qt4", has been added to allow users to select > PyQt4, PyQt4v2, or PySide." > > 2. I cannot see any reference to PyQt4v2 in the code, and any attempt to set > the rcParam to use it results in a param validation error, is this a mistake > in the web page or omission in the code? > > Thanks in advance > RuiDC
On Tue, Oct 18, 2011 at 11:19 AM, RuiDC <ru...@ya...> wrote: > > > The "what's new in 1.1.0" page, > http://matplotlib.sourceforge.net/users/whats_new.html refers to: > "An rcParam entry, "backend.qt4", has been added to allow users to select > PyQt4, PyQt4v2, or PySide." > > 2. I cannot see any reference to PyQt4v2 in the code, and any attempt to > set > the rcParam to use it results in a param validation error, is this a > mistake > in the web page or omission in the code? > > RuiDC, I think that might have been a little unclear. You should only need to select 'PyQt4' or 'PySide'. If PyQt4 is selected, then (I think) the v2 is automatically tested for internally. Ben Root
As of 1.1.0, FigureCanvasQTAgg.draw() now no longer calls FigureCanvasAgg.draw(), and as a result I am getting problems with code that used to update positions/size of legend and labels during on_draw. 1. Is there a new way to get the canvas to draw? or is this a bug? The "what's new in 1.1.0" page, http://matplotlib.sourceforge.net/users/whats_new.html refers to: "An rcParam entry, "backend.qt4", has been added to allow users to select PyQt4, PyQt4v2, or PySide." 2. I cannot see any reference to PyQt4v2 in the code, and any attempt to set the rcParam to use it results in a param validation error, is this a mistake in the web page or omission in the code? Thanks in advance RuiDC -- View this message in context: http://old.nabble.com/QT-draw-issue-in-1.1.0-and-PyQt4v2-missing--tp32676093p32676093.html Sent from the matplotlib - users mailing list archive at Nabble.com.
As far as I know, the 'arrow' function is not recommended. The 'annotate' function has a lot more features. Here's your code with the annotate function: import pylab from scipy import optimize import numpy x1=numpy.arange(-4000,1000,0.1) x2=numpy.arange(-1000,4000,0.1) y1=100*numpy.square(x1+1500) y2=100*numpy.square(x2-1500)-0.1e9 pylab.figure() pylab.plot(x1,y1,x2,y2) pylab.grid(True) pylab.annotate('',(-3000,0),(-3000,-100000000), arrowprops=dict(arrowstyle='<->')) pylab.xlim(-5000,5000) pylab.ylim(-2e8,7e8) pylab.show() Hope that helps a little. Ryan On Mon, Oct 17, 2011 at 12:02 PM, Piter_ <x....@gm...> wrote: > Hi all > I want to draw an two headed arrow between two points. > But I get a line. What I am doing wrong? I actually try to plot an > image similar to this one: > > http://upload.wikimedia.org/wikipedia/commons/a/a3/Parameters_of_the_Marcus_Equation.JPG > may be I can use an annotate function for this. > Thanks for help. > Petro. > ######## > import pylab > from scipy import optimize > import numpy > x1=numpy.arange(-4000,1000,0.1) > x2=numpy.arange(-1000,4000,0.1) > y1=100*numpy.square(x1+1500) > y2=100*numpy.square(x2-1500)-0.1e9 > pylab.figure() > pylab.plot(x1,y1,x2,y2) > pylab.grid("True") > pylab.arrow(-3000,0,0,-100000000,width=1) > pylab.xlim(-5000,5000) > pylab.ylim(-2e8,7e8) > pylab.show() > ###########x > > > ------------------------------------------------------------------------------ > All the data continuously generated in your IT infrastructure contains a > definitive record of customers, application performance, security > threats, fraudulent activity and more. Splunk takes this data and makes > sense of it. Business sense. IT sense. Common sense. > http://p.sf.net/sfu/splunk-d2d-oct > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users >
Thank you for the tip. I actually had played around with matplotlib.rcdefaults() before, but that didn't work. I tried now the using exactly the clear_state function you suggested. Since it still didn't work, I finally found out that I had a very similar problem with another module from which I determine axes, figure size and other things. So, thank you very much, that helped me a lot and now things work the way I want! On Die 18 Okt 2011 04:45:27 CEST, John Hunter wrote: > On Mon, Oct 17, 2011 at 2:57 PM, tinux <hof...@gm...> wrote: >> >> I have around 100 python files, that each create one figure using matplotlib. >> Since I want to use all CPU cores, I basically did "for filename in files: >> execfile(filename)" using a python script. However, this does not produce >> the same output as running each file separately (for instance axes, figure >> size are sometime wrong). >> I _think_ I narrowed it down to this: In all files I need to do >> "matplotlib.rcParams(update)". I guess that this influences the matplotlib >> rc parameters and thus somehow values from some figures are used for others. >> >> So, my question is, how can I do something like >> "matplotlib.rcParams(update)" so that it does not influence other scripts >> that are run in parallel using 'execfile'? Or, how do I set rc parameters >> for one specific script? >> >> BTW, I tried 'pp' and 'multiprocessing', same problem with both. > > The problem is that the rc params are module level in matplotlib so in > a persistent process like ipython if one script modifies the rc > params, subsequent files executed in the same process will be > affected. You can restore the rc params to their default state by > doing before each call to execfile > > import matplotlib > matplotlib.rc_file_defaults() > > > We face the same issue in the "plot_directive" which we use when > building the matplotlib documentation. We define a function > "clear_state" in > > https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/sphinxext/plot_directive.py#L484 > > which closes all open figures, restore the rc defaults, and the > updates the defaults to an rc dictionary of the parameters we want for > each run.
two lines: ax.set_xlim(min(ax.get_xlim()+ax.get_ylim()),max(ax.get_xlim()+ax.get_ylim())) ax.set_ylim(ax.get_xlim()) chao 2011年10月18日 Chao YUE <cha...@gm...> > Dear all, > > I am making a 1:1 ratio plot to compare data. > I can write a small part of code to detect which range of the x or y axis > is bigger and then adjust the axis of shorter range to have the same range > with the longer one. > and use set_aspect('equal') method to have the same tick interval on both > axises. > but is there an automatic method to do this job? > > Thanks, > > Chao > > -- > > *********************************************************************************** > Chao YUE > Laboratoire des Sciences du Climat et de l'Environnement (LSCE-IPSL) > UMR 1572 CEA-CNRS-UVSQ > Batiment 712 - Pe 119 > 91191 GIF Sur YVETTE Cedex > Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16 > > ************************************************************************************ > > -- *********************************************************************************** Chao YUE Laboratoire des Sciences du Climat et de l'Environnement (LSCE-IPSL) UMR 1572 CEA-CNRS-UVSQ Batiment 712 - Pe 119 91191 GIF Sur YVETTE Cedex Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16 ************************************************************************************
Dear all, I am making a 1:1 ratio plot to compare data. I can write a small part of code to detect which range of the x or y axis is bigger and then adjust the axis of shorter range to have the same range with the longer one. and use set_aspect('equal') method to have the same tick interval on both axises. but is there an automatic method to do this job? Thanks, Chao -- *********************************************************************************** Chao YUE Laboratoire des Sciences du Climat et de l'Environnement (LSCE-IPSL) UMR 1572 CEA-CNRS-UVSQ Batiment 712 - Pe 119 91191 GIF Sur YVETTE Cedex Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16 ************************************************************************************
On Mon, Oct 17, 2011 at 10:42 PM, pratik <pra...@gm...> wrote: > Is there a function that can draw an ellipsoid like matlab's ellipsoid > function? > relevant: > > http://stackoverflow.com/questions/2153768/draw-ellipse-and-ellipsoid-in-matlab > > Thanks, > > from matplotlib.patches import Ellipse import matplotlib.pyplot as plt x = 0.5 y = 0.5 a = 4 b = 1 theta = 45.0 ell = Ellipse((x, y), a, b, theta) ax = plt.gca() ax.add_artist(ell) plt.show() There are some additional kwargs to the Ellipse constructor that allows you to control color and such. I hope that helps! Ben Root
Is there a function that can draw an ellipsoid like matlab's ellipsoid function? relevant: http://stackoverflow.com/questions/2153768/draw-ellipse-and-ellipsoid-in-matlab Thanks,
On Mon, Oct 17, 2011 at 2:57 PM, tinux <hof...@gm...> wrote: > > I have around 100 python files, that each create one figure using matplotlib. > Since I want to use all CPU cores, I basically did "for filename in files: > execfile(filename)" using a python script. However, this does not produce > the same output as running each file separately (for instance axes, figure > size are sometime wrong). > I _think_ I narrowed it down to this: In all files I need to do > "matplotlib.rcParams(update)". I guess that this influences the matplotlib > rc parameters and thus somehow values from some figures are used for others. > > So, my question is, how can I do something like > "matplotlib.rcParams(update)" so that it does not influence other scripts > that are run in parallel using 'execfile'? Or, how do I set rc parameters > for one specific script? > > BTW, I tried 'pp' and 'multiprocessing', same problem with both. The problem is that the rc params are module level in matplotlib so in a persistent process like ipython if one script modifies the rc params, subsequent files executed in the same process will be affected. You can restore the rc params to their default state by doing before each call to execfile import matplotlib matplotlib.rc_file_defaults() We face the same issue in the "plot_directive" which we use when building the matplotlib documentation. We define a function "clear_state" in https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/sphinxext/plot_directive.py#L484 which closes all open figures, restore the rc defaults, and the updates the defaults to an rc dictionary of the parameters we want for each run.
On Mon, Oct 17, 2011 at 6:58 PM, Floyd John <Joh...@en...> wrote: > Hello, > > I have read your instruction for bug reporting but this is fairly simple. > > There is a call to self.get_cpp_triangulation() which exists but there is also a call to self._get_cpp_triangulation at line 174 to obtain the neighbours. > > Easy to fix. Thanks for the report. Even easy issues are best reported on the issue tracker so they will be less likely to fall between the cracks, we can tag them and assign developers to them, etc. I've opened https://github.com/matplotlib/matplotlib/issues/535 JDH
Somehow, Figure.legend flattens the given handle list and this is the cause of the problem. https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/figure.py#L994 Does anyone know why this is necessary? I just filed a pull request to remove this. https://github.com/matplotlib/matplotlib/pull/534/files Meanwhile, you may do from matplotlib.legend import Legend l = Legend(fig, h, l, loc='lower right') fig.legends.append(l) This should be equivalent to fig.legend(h,l,loc='lower right'). Or, if you don't need axes legend, you may do legend(h,l,loc='lower right', bbox_to_anchor=[0,0,1,1], bbox_transform=fig.transFigure) Regards, -JJ On Tue, Oct 18, 2011 at 6:59 AM, Sterling Smith <sm...@fu...> wrote: > Let me first say that I appreciate the work that the developers have put into matplotlib. You're doing a great job. > > I have filed a bug report at > > https://github.com/matplotlib/matplotlib/issues/533 > > wherein I post the following > > Consider: > > from pylab import * > x = arange(0,1,.01) > y = x**2 > fig = figure(2) > ax = fig.add_subplot(111) > errorbar(x,y,yerr=x/10.,label='$x^2$') > errorbar(x,y**3,yerr=x/10.,label='$x^6$') > legend(loc='upper center') > h,l = ax.get_legend_handles_labels() > fig.legend(h,l,loc='lower right') > > > I am getting the right legend for the axes based legend, but the figure based legend seems to be using the different parts of the errorbar for subsequent handles, instead of using them as a group. From what I can tell, this has appeared since the upgrade to version 1.1.0. > > I am running on Linux, python 2.7, gtkAgg backend. > > Thanks, > Sterling > > > ------------------------------------------------------------------------------ > All the data continuously generated in your IT infrastructure contains a > definitive record of customers, application performance, security > threats, fraudulent activity and more. Splunk takes this data and makes > sense of it. Business sense. IT sense. Common sense. > http://p.sf.net/sfu/splunk-d2d-oct > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users >
Hello, I have read your instruction for bug reporting but this is fairly simple. There is a call to self.get_cpp_triangulation() which exists but there is also a call to self._get_cpp_triangulation at line 174 to obtain the neighbours. Easy to fix. Regards John ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- This email is intended for the addressee(s) named and may contain confidential and/or privileged information. If you are not the intended recipient, please notify the sender and then delete it immediately. Any views expressed in this email are those of the individual sender except where the sender expressly and with authority states them to be the views of the Office of Environment and Heritage, NSW Department of Premier and Cabinet. PLEASE CONSIDER THE ENVIRONMENT BEFORE PRINTING THIS EMAIL