SourceForge logo
SourceForge logo
Menu

matplotlib-users — Discussion related to using matplotlib

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
(18)
2
(8)
3
(2)
4
(8)
5
(5)
6
(3)
7
(17)
8
(3)
9
(3)
10
(3)
11
(14)
12
(1)
13
14
(2)
15
(9)
16
(23)
17
(12)
18
(13)
19
(7)
20
(4)
21
(2)
22
(6)
23
(7)
24
(6)
25
(2)
26
27
(4)
28
(1)
29
(10)
30
(7)
31
(14)


Showing results of 214

<< < 1 .. 7 8 9 (Page 9 of 9)
From: John H. <jdh...@ac...> - 2005年03月01日 14:51:26
>>>>> "Robert" == Robert Leftwich <ro...@le...> writes:
 John> But if you can get a standalone script, that would be most
 John> efficient.
 Robert> I sent it direct to you, rather than everyone on the list.
OK, the good news is that my first hunch was correct. The fact that
the minimal script (off-list) needed more iterations than the full,
and that the number of iterations on my system before the crash was
different than yours indicated to me that it was a memory problem.
matplotlib uses a fair number of cyclic references (figure refers to
canvas and canvas refers to figure -- this one was actually added in
0.72 which is where I suspect the culprit is).
In the pylab interface, I call gc.collect in the destroy method of
each figure manager to force the garbage collector to clean up. In
your script, which doesn't use the pylab interface, you need to
manually add this call yourself. I'll make it a FAQ because it is
fairly important, and add a link or the faq in the agg_oo example.
import gc
 def graphAll(self):
 for i in range(100):
 print i
 self.graphRSIDailyBenchmark()
 gc.collect()
Should cure what ails you!
python gurus -- would it be advisable for me to insert a gc.collect()
somewhere in the matplotlib OO hierarchy since I know cyclic
references are a problem? Eg in the call to the FigureCanvas init
function?
JDH
From: John H. <jdh...@ac...> - 2005年03月01日 14:34:38
>>>>> "kristen" == kristen kaasbjerg <co...@ya...> writes:
 kristen> Hi everyone Does anyone know how to asign different
 kristen> patches in legend when plotting 2 or more histograms in
 kristen> the same figure. I've tried:
 kristen> legend((patches1,patches2),(hist1,hist2)) ,
 kristen> but this gives the same patches in the legend inset.
I'm assuming patches1 and patches2 are the return values from hist, in
which case they are each a *list* of patches. What you want to do is
pass a *single* item from each of those lists as representative
patches.
 legend( (patches1[0],patches2[0]), ('label1', 'label2') ) 
Next time if you post a more complete code snippet, I won't have to
guess what patches1 and patches2 are!
Hope this helps,
JDH
From: Robert L. <ro...@le...> - 2005年03月01日 10:18:03
I took up John's suggestion to 'new users starting on the path to matplotlib OO 
API enlightenment to make notes and write a tutorial as you go'.
I'm posting it to the list to generate some feedback and hopefully help out any 
fellow newbies (although I would prefer it to be on a Wiki somewhere).
Feel free to comment....
Robert
==================================================
Getting Started With Matplotlib's OO Class Library
==================================================
Introduction
------------
 For those people coming to Matplotlib without any prior experience
 of MatLab and who are familiar with the basic concepts of
 programming API's and classes, learning to use Matplotlib via the
 class library is an excellent choice. The library is well put
 together and works very intuitively once a few fundamentals are
 grasped.
 The advice from John Hunter, the original developer of the library
 is 'don't be afraid to open up matplotlib/pylab.py to see how the
 pylab interface forwards its calls to the OO layer.' That in
 combination with the user's guide, the examples/embedding demos,
 and the mailing lists, which are regularly read by many developers
 are an excellent way to learn the class library.
 Following is a brief introduction to using the class library,
 developed as I came to grips with how to produce my first graphs.
Classes/Terms
-------------
 FigureCanvas - is primarily a container class to hold the Figure
 instance, an approach which enforces a rigid segregation between
 the plot elements, and the drawing of those elements. It can be
 loosely thought of as 'the place where the ink goes'.
 Figure - a container for one or more Axes. It is possible to
 create and manage an arbitrary number of figures using the Figure
 class. Note also that a figure can have its own line, text and
 patch elements, independent of any axes.
 Axes - the rectangular area which holds the basic elements (Line2D,
 Rectangle, Text, etc) that are generated by the Axes plotting
 commands (e.g. the Axes plot, scatter, bar, hist methods). The Figure
 methods add_axes and add_subplot are used to create and add an Axes
 instance to the Figure. You should not instantiate an Axes instance
 yourself, but rather use one of these helper methods.
 Line - implemented in the Line2D class, can draw lines(!) with a
 variety of styles (solid, dashed, dotted, etc), markers (location
 indicators on the line - point, circle, triangle, diamond, etc) and
 colours (k or #000000 - black, w or #FFFFFF - white, b or #000099 -
 blue, etc)
 Text - a class that handles storing and drawing of text in window
 or data coordinates. The text can be coloured, rotated, aligned in
 various ways relative to the origin point, and have font properties
 (weight, style, etc) assigned to it.
 Patch - a patch is a two dimensional shape with a separately
 specifiable face and edge colour. Specialised patch classes include
 circle, rectangle, regular polygon and more.
 Ticks - the indicators of where on an axis a particular value
 lies. Separate classes exist for the x and y axis ticks, (XTick,
 YTick) and each are comprised of the primitive Line2D and Text
 instances that make up the tick.
 Artist - Everything that draws into a canvas derives from Artist
 (Figure, Axes, Axis, Line2D, Rectangle, Text, and more). Some of
 these are primitives (Line2D, Rectangle, Text, Circle, etc) in that
 they do not contain any other Artists, some are simple composites,
 e.g. XTick which is mad up of a couple of Line2D and Text instances
 (upper and lower tick lines and labels), and some are complex, e.g.
 and Axes or a Figure, which contain both composite and primitive
 artists.
Techniques
----------
1. Setting up an agg backend canvas:
 from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
 from matplotlib.figure import Figure
 fig = Figure()
 canvas = FigureCanvas(fig)
2. To set the size of the Figure, use the figsize keyword, which uses
 inches as the units:
 # this results in a 204x192 pixel png - if output at 100 dpi, using
 # canvas.print_figure(.., dpi=100)
 fig = Figure(figsize=(2.04,1.92))
 canvas = FigureCanvas(fig)
3. To add a single subplot:
 # The 111 specifies 1 row, 1 column on subplot #1
 ax = fig.add_subplot(111)
4. To change the axes size and location on construction, e.g to fit
 the labels in on a small graph:
 ax = fig.add_axes([0.2,0.2,0.5,0.7])
 An existing Axes position/location can be changed by calling
 the set_position() method.
5. Adding a graph of some sort is as simple as calling the required
 function on the axes instance:
 p1 = ax.bar(...) or p1 = ax.plot(...)
6. Setting a label with extra small text:
 ax.set_xlabel('Yrs', size='x-small')
7. Setting the graph title:
 ax.set_title(A graph title', size='x-small')
8. To enable only the horizontal grid on the major ticks:
 ax.grid(False)
 ax.yaxis.grid(True, which='major')
9. To only have a left y-axis and a bottom x-axis:
 # set the edgecolor and facecolor of the axes rectangle to be the same
 frame = ax.axesPatch
 frame.set_edgecolor(frame.get_facecolor())
 # Specify a line in axes coords to represent the left and bottom axes.
 bottom = Line2D([0, 1], [0, 0], transform=ax.transAxes)
 left = Line2D([0, 0], [0, 1], transform=ax.transAxes)
 ax.add_line(bottom)
 ax.add_line(left)
10. To change the size of the tick labels :
 labels = ax.get_xticklabels() + ax.get_yticklabels()
 for label in labels:
 label.set_size('x-small')
11. Removing the black rectangle around an individual bar graph
 rectangle (by changing it to the bar colour) :
 c = '#7FBFFF'
 p1 = ax.bar(ind, values, width, color=c)
 for r in p1:
 r.set_edgecolor(c)
Putting it together
-------------------
 Following is a simple example of how to use the class library
 This is examples/agg_oo.py in the matplotlib src distribution, also
 found (like all examples) at http://matplotlib.sf.net/examples
 #!/usr/bin/env python
 """
 A pure OO (look Ma, no pylab!) example using the agg backend
 """
 from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
 from matplotlib.figure import Figure
 fig = Figure()
 canvas = FigureCanvas(fig)
 ax = fig.add_subplot(111)
 ax.plot([1,2,3])
 ax.set_title('hi mom')
 ax.grid(True)
 ax.set_xlabel('time')
 ax.set_ylabel('volts')
 canvas.print_figure('test')
From: kristen k. <co...@ya...> - 2005年03月01日 09:23:51
Hi everyone
Does anyone know how to asign different patches in
legend when plotting 2 or more histograms in the same
figure.
I've tried:
legend((patches1,patches2),(hist1,hist2)) ,
but this gives the same patches in the legend inset.
Kristen
		
__________________________________ 
Do you Yahoo!? 
Take Yahoo! Mail with you! Get it on your mobile phone. 
http://mobile.yahoo.com/maildemo 
From: John H. <jdh...@ac...> - 2005年03月01日 03:28:34
>>>>> "Axel" == Axel Kowald <A.K...@gm...> writes:
 Axel> Hi, I'm using matplotlib 0.71 and I think I found a bug in
 Axel> polyfit.
 Axel> This simple linear regression on two data points gives the
 Axel> correct answer:
 >>>> polyfit([731.924,731.988],[915,742],1)
 ^^^^
 floats
 Axel> However, if I multiply my x values by 1000 the result is
 Axel> wrong:
 >>>> polyfit([731924,731988],[915,742],1)
 ^^^^
 integers
 
Both of these should work
print polyfit([731.924,731.988],[915.,742.],1)
print polyfit([731924.,731988.],[915.,742.],1)
I fixed the polyfit code to explicitly convert the input arrays to
floats arrays, which fixes this bug.
Thanks for the report.
JDH
From: John H. <jdh...@ac...> - 2005年03月01日 03:21:07
>>>>> "Darren" == Darren Dale <dd...@co...> writes:
 Darren> I need to plot some arrays that may begin or end with
 Darren> nan's. Currently, mpl does a good job handling something
 Darren> like plot([1,2,nan,4]), but the has trouble with
 Darren> plot([nan,2,3,4]) and plot([1,2,3,nan]).
 Darren> Could somebody point me in the right direction: where can
 Darren> I look in the sourcecode to learn how mpl deals with
 Darren> plotting nans?
mpl doesn't explicitly do anything with nan . I think what you are
observing has something to do with how agg is handling these values,
because they are passed straight through to the backend.
So, for now, there is no place in the mpl code to go, though I would
like to add some support for nan, or masked arrays, or masks, in the
future.
JDH
From: John H. <jdh...@ac...> - 2005年03月01日 03:08:54
>>>>> "Humufr" == Humufr <hu...@ya...> writes:
 Humufr> Hi, I see a problem when I'm using autoscale. I
 Humufr> have a spectra with huge difference in y. I used xlim to
 Humufr> look only a part of my spectra and the ylim is not
 Humufr> autoscale to this peculiar part of the spectra but on all
 Humufr> the spectra.
 Humufr> I'm using the last CVS version.
This was done intentionally for performance reasons. Every plot
command calls autoscale, and each time this happens the autoscaler
would have to iterate over all the data in the axes (text, polygons,
lines, etc) and determine the vertices in the view limits. Certainly
doable, but I try to make mpl reasonably efficient for large data sets
and this could get expensive. Instead, when a piece of data is added
to the axes initially, I update the datalim with it and use that in
the autoscaler.
I'm aware of the problem you describe -- autoscaling can be suboptimal
when you initially set an axis view to only a part of the axes. This
is a problem I can live with -- autoscaling doesn't have to be
perfect, it just needs to get it right most of the time. And when it
doesn't do the most sensible thing, eg in this case, it at least
includes your data in the plot, and it is fairly easy for you to use
the navigation controls -- eg constrained y zoom by pressing y and
dragging the right mouse -- or otherwise set the limits manually.
So this is an area where I'd rather trade convenience for performance.
It wouldn't be to much work though, to add an option to the the
autoscaler to fix one of the axes limits (eg the xlim) and autoscale
the other axis only considering data within that range....
JDH
From: John H. <jdh...@ac...> - 2005年03月01日 03:01:43
>>>>> "Humufr" == Humufr <hu...@ya...> writes:
 Humufr> Hi, I found something strange inside the eps file create
 Humufr> with matplotlib. I used matplotlib to trace a port of a
 Humufr> spectra (I used the function plot and axis). I have been
 Humufr> very surprise to see that all the spectra was inside the
 Humufr> eps file. To see it, I must admit that I did something
 Humufr> weird. I create an eps file with matplotlib and I
 Humufr> transform the file in svg format with pstoedit and I edit
 Humufr> this file with inkscape.
 Humufr> I don't know where is the problem but I don't think that
 Humufr> it's necessary to have all the point inside the output
 Humufr> file, perhaps it's not possible to do anything to change
 Humufr> it but that can create some huge file. So if nothing can
 Humufr> be done, that will be a good idea to put it in the FAQ to
 Humufr> let the users cut their data if needed.
This is intentional, but I can see the problems it could create for a
large PS file, so it may be worth mentioning this in the
documentation. Basically, we leave it or the backend to do the
clipping to the view limits, and in postscript the total line path is
drawn and the clip rectangle is set. It would be difficult and
inefficient for us to do the clipping in the front end. Think about
pathological cases, for example, where the x,y center of a marker is
far outside the view limits, but the marker is very large so that some
of its vertices are inside the view limits.
Earlier versions of matplotlib had a data clipping feature where line
points outside the view box were removed before adding them to the
backend. But noone ever used it and it added complexity to the code
so I eventually deprecated it.
JDH
From: Robert L. <ro...@le...> - 2005年03月01日 02:39:04
John Hunter wrote:
 >>>>>>"Robert" == Robert Leftwich <ro...@le...> writes:
 >
 > Robert> Correct, no gui, verbose output:
 >
 > You say no gui, but the verbose report says tkagg:
 >
 > backend TkAgg version 8.4
My bad, forgot to change the rc when re-installing 0.72.
 >
 > Do you see the problem when using agg alone?
Yes, in fact it seems to be worse.
 >
 > >> But if you can get a standalone script, that would be most
 > >> efficient.
 >
 > Robert> Working on it now.
 >
 > Looking forward to it :-)
I sent it direct to you, rather than everyone on the list.
Robert
From: John H. <jdh...@ac...> - 2005年03月01日 02:31:47
>>>>> "Robert" == Robert Leftwich <ro...@le...> writes:
 Robert> John Hunter wrote:
 >> Repeatable is good. Standalone much better. So you are
 >> running the pure Agg backend (no GUI?). It would help to post
 >> the output of c:> python myscript.py --verbose-helpful
 Robert> Correct, no gui, verbose output:
You say no gui, but the verbose report says tkagg:
 backend TkAgg version 8.4
Do you see the problem when using agg alone?
 >> But if you can get a standalone script, that would be most
 >> efficient.
 Robert> Working on it now.
Looking forward to it :-)
JDH
From: Robert L. <ro...@le...> - 2005年03月01日 00:39:49
John Hunter wrote:
> 
> Repeatable is good. Standalone much better. So you are running the
> pure Agg backend (no GUI?). It would help to post the output of 
> 
> c:> python myscript.py --verbose-helpful
Correct, no gui, verbose output:
matplotlib data path C:\Python24\share\matplotlib
loaded rc file C:\Python24\share\matplotlib\.matplotlibrc
matplotlib version 0.72.1
verbose.level helpful
interactive is False
platform is win32
numerix numarray 1.2.2
font search path ['C:\\Python24\\share\\matplotlib']
loaded ttfcache file c:\home\robert\.ttffont.cache
backend TkAgg version 8.4
> It probably won't happen with 0.71 and this would be worth testing.
Everything works without error on 0.71, using either numarray or Numeric.
> But if you can
> get a standalone script, that would be most efficient.
Working on it now.
Robert
From: Stephen W. <ste...@cs...> - 2005年03月01日 00:33:41
John Hunter wrote:
>rm -rf your build subdir and reinstall matplotlib 0.72.1 or CVS.
>
Ouch. Sorry for the noise. I slipped up when I ran Fernando's 
pybrpm-noarch script on matplotlib 0.72 and wound up with a reinstall of 
an old 0.70 RPM.
From: John H. <jdh...@ac...> - 2005年03月01日 00:22:10
>>>>> "Stephen" == Stephen Walton <ste...@cs...> writes:
 Stephen> Hi, all, Well, I've hit a new problem with the log
 Stephen> plotting issue. Try the following commands after
 Stephen> 'ipython -pylab':
 Stephen> x=arange(25)+1 semilogx(x,x**2) hold(False)
 Stephen> semilogx(x,x**2)
 Stephen> I get an apparently unbreakable chain of "Cannot take log
 Stephen> of nonnegative value" messages for every following
 Stephen> plot(), semilog(), or loglog() command until ipython is
 Stephen> exited. None of close(1), clf(), or cla() helps clear
 Stephen> the problem. Only creating a new figure with figure(2)
 Stephen> and plotting to it seems to help.
rm -rf your build subdir and reinstall matplotlib 0.72.1 or CVS. The
error string you report doesn't exist in the current code base, and I
can't reproduce your error.
JDH
From: Stephen W. <ste...@cs...> - 2005年03月01日 00:13:15
Hi, all,
Well, I've hit a new problem with the log plotting issue. Try the 
following commands after 'ipython -pylab':
x=arange(25)+1
semilogx(x,x**2)
hold(False)
semilogx(x,x**2)
I get an apparently unbreakable chain of "Cannot take log of nonnegative 
value" messages for every following plot(), semilog(), or loglog() 
command until ipython is exited. None of close(1), clf(), or cla() 
helps clear the problem. Only creating a new figure with figure(2) and 
plotting to it seems to help.

Showing results of 214

<< < 1 .. 7 8 9 (Page 9 of 9)
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /