Re: [Matplotlib-users] Scatterplot problem

2008-03-21 Thread Sean Hammond
Okay I've learnt a bit more about this:

http://img229.imageshack.us/img229/6467/scatterplot5st6.png

I need to explicitly make a new figure as well as a new axis, and put
the rc calls before the figure calls, rc changes only seem to take
effect on figures created afterwards. Also I was stupidly using the plot
function (for plotting lines) for a scatter plot, I've now discovered
the scatter function.

Things are pretty much how I want them now, but I still have a couple of
questions:

How do I get rid of the redundant ticks on the top and right edges?

Is there any way to stop some of my text labels from overlapping?

Why is there such a big gap between the plot itself and the axes ticks?
The scatter function seems to do this, but I don't see any option to
control the size of the gap. I wonder if I've done something weird like
create an axes within an axes. I don't mind the gap much, it's just
surprising, and could do with being much smaller to make the figure
easier to read.

Here's my new source code:

rc('xtick.major',size=8)
rc('xtick',direction='out')
rc('ytick.major',size=8)
rc('ytick',direction='out')
fig = figure(facecolor='white' )
axes(frameon=False)
title('Comparison of lower- and upper-bounds per function in week one
and week two')
l =
scatter(functions.lowerboundsweek1,functions.lowerboundsweek2,marker='s',color='g')
u =
scatter(functions.upperboundsweek1,functions.upperboundsweek2,marker='^',color='b')
legend((l,u),('Lower-bounds','Upper-bounds'),'best')
plot([0,1],[0,1],color='#99',linestyle='--')
xlabel('Week 1')
ylabel('Week 2')
xticks(functions.upperboundsweek1+functions.lowerboundsweek1,'
'*len(functions.upperboundsweek1+functions.lowerboundsweek1))
yticks(functions.upperboundsweek2+functions.lowerboundsweek2,'
'*len(functions.upperboundsweek2+functions.lowerboundsweek2))
for function,x,y in
map(None,functions.shortnames,functions.upperboundsweek1,functions.upperboundsweek2):
annotate(function,xy=(x,y),size=8,color='b')   
for function,x,y in
map(None,functions.shortnames,functions.lowerboundsweek1,functions.lowerboundsweek2):
annotate(function,xy=(x,y),size=8,color='g') 


On Tue, 2008-02-26 at 16:51 +, chombee wrote:
 I'm having a couple of problems drawing a basic relational scatter plot.
 (Specifically, it's called a dot-dash-plot in the book I have and is
 described as framing the bivariate scatter with the marginal distribution
 of each variable.) The idea is that you have a bivariate scatter plot
 and use the two marginal frequency distributions of the data as the two
 axes.
 
 1. By setting the x and y tick length and using space characters as the
 tick labels I was able to get ticks only and no labels on the axes as I
 want. But these ticks appear along the top and right edges of the plot,
 as well as the left and bottom. Is there any way to get rid of the top
 and right ticks?
 
 2. I'm getting phantom numbers on my axes, the 0.2, 0.4, 0.6 etc. I
 don't know where these are coming from or what they measure (my data
 ranges from 0-7 on both axes, not 0-1).
 
 3. I want to label each data point with a string. I'm doing this with
 annotate but the strings sometimes overlap each other. Any idea how to
 avoid this?
 
 Here's a PNG of my plot as it is:
 
 http://img137.imageshack.us/img137/4015/scatterplotlk2.png
 
 And here's the source:
 
 # datax and datay are equal length lists of floats, the data I want to 
 # plot. labels is another equal length list containing the strings I 
 # want to label the data points with. All three lists are in the same
 # order.
 
 axes(frameon=False)
 rc('xtick.major',size=8)
 rc('xtick',direction='out')
 xticks(datax,' '*len(datax))
 rc('ytick.major',size=8)
 rc('ytick',direction='out')
 yticks(datay,' '*len(datay))
 plot(datax,datay,'r.')
 plot([0,7],[0,7])
 xlabel('Proportion of total number of cards, week 1')
 ylabel('Proportion of total number of cards, week 2')
 title('Frequency of cards per function')
 for label,x,y in map(None,labels,datax,datay):
 annotate(function,xy=(x,y),size=8)
 
 Thanks!
 
 
 
 -
 This SF.net email is sponsored by: Microsoft
 Defy all challenges. Microsoft(R) Visual Studio 2008.
 http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users




-
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Scatterplot problem

2008-02-28 Thread Bernhard Voigt
 How do I get rid of the redundant ticks on the top and right edges?


pylab.gca().get_xaxis().set_ticks_postion('bottom')

same for yaxis



 Is there any way to stop some of my text labels from overlapping?


don't know


 Why is there such a big gap between the plot itself and the axes ticks?


did you try  pylab.axis('tight')

Bernhard
-
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Scatterplot problem

2008-02-28 Thread John Hunter
On Wed, Feb 27, 2008 at 12:04 PM, chombee [EMAIL PROTECTED] wrote:

  Is there any way to stop some of my text labels from overlapping?

For the ones that are tightly clustered, you could use the annotate
command to move the text farther away from the associated point.
Annotate has support for drawing an arrow from the text label to the
annotated point.  But it won't do auto-layout -- you'll still have to
choose the coordinates of the text label  so they don't overlap.

JDH

-
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Scatterplot problem

2008-02-28 Thread chombee

On Thu, 2008-02-28 at 14:19 +0100, Bernhard Voigt wrote:
 
 How do I get rid of the redundant ticks on the top and right
 edges?
 
 pylab.gca().get_xaxis().set_ticks_postion('bottom')
 
 same for yaxis

That worked, thanks!
 
 Why is there such a big gap between the plot itself and the
 axes ticks?
 
 did you try  pylab.axis('tight') 

That did improve the situation slightly, but it still looks like
something odd is going on. It's clearer if I actually draw the axis
frame. These two screenshots show the graphic before and after calling
axis('tight'):

http://img87.imageshack.us/img87/7352/beforetightku8.png

http://img403.imageshack.us/img403/9506/aftertightyk5.png

As you can see the data moves a little closer to the axes when I call
axis('tight'). But that dashed line starts at (0,0), it is plotted with
the simple command:

plot([0,7],[0,7],color='#99',linestyle='--')

and yet the beginning of the line is nowhere near either axis, even
after calling axis('tight'). So something's up. Here's the output of
axis('tight'):

 (-0.33718689788053952,
 7.0809248554913298,
 -0.34782608695652173,
 7.3043478260869561)

And here's the source code that produced the graphic in the first place:

rc('xtick.major',size=8)
rc('xtick',direction='out')
rc('ytick.major',size=8)
rc('ytick',direction='out')
fig = figure(facecolor='white' )
ax = axes(frameon=True)
ax.get_xaxis().set_ticks_position('bottom')
ax.get_yaxis().set_ticks_position('left')
title('Comparison of frequency of cards per function in week one and
week two')
s =
scatter(functions.proportioncardsweek1,functions.proportioncardsweek2,marker='s',color='g')
plot([0,7],[0,7],color='#99',linestyle='--')
xlabel('Proportion of total number of cards, week 1')
ylabel('Proportion of total number of cards, week 2')
xticks(functions.proportioncardsweek1,'
'*len(functions.proportioncardsweek1))
yticks(functions.proportioncardsweek2,'
'*len(functions.proportioncardsweek2))
for function,x,y in
map(None,functions.shortnames,functions.proportioncardsweek1,functions.proportioncardsweek2):
annotate(function,xy=(x,y),size=8)





-
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Scatterplot problem

2008-02-28 Thread chombee
Okay I see what's going on now. The output from axis('tight') specifies
the limits of the two axes:

  (-0.33718689788053952,
  7.0809248554913298,
  -0.34782608695652173,
  7.3043478260869561)

As you can see it's actually setting negative minimum limits for both
axes, which is why the axes are offset from the (0,0) position. The clue
to this behaviour is in the axis function docstring:

 axis('auto') or 'normal' (deprecated) restores default behavior;
 axis limits are automatically scaled to make the data fit
 comfortably within the plot box.

and

 axis('tight') changes x and y axis limits such that all data is
 shown. If all data is already shown, it will move it to the center
 of the figure without modifying (xmax-xmin) or (ymax-ymin). Note
 this is slightly different than in matlab.

Neither of those will necessarily set the xmin and ymin of the axes to
0. It depends on what data you've plotted before calling axis(). I found
that if I call axis('tight') before plotting anything (i.e. before
calling plot or scatter) then the axes xmin and ymin do get set to 0,
but this is because at the time of calling axis('tight') there is no
data to show.

If you call axis('tight') after plotting data then (contrary to the
docstring) it seems to adjust the axes so that all data is shown **and
none of it is too close to the axes**, there is some degree of padding,
although it is tighter than with axis('auto').

I'm not sure about this 'auto' and 'tight' behaviour. To my eye the
corner formed by the x and y axes at the bottom-left signifies (0,0),
unless otherwise stated. The padding applied by 'normal' and 'tight'
breaks this expectation. In my case, when I don't have any numerical
labels on the axes to show that they begin at (-0.34,-0.35), I should
probably make sure that they begin at (0,0).

You can explicitly set the axes limits with axis(xmin=0,ymin=0).



-
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Scatterplot problem

2008-02-27 Thread chombee
Okay I've learnt a bit more about this:

http://img229.imageshack.us/img229/6467/scatterplot5st6.png

I need to explicitly make a new figure as well as a new axis, and put
the rc calls before the figure calls, rc changes only seem to take
effect on figures created afterwards. Also I was stupidly using the plot
function (for plotting lines) for a scatter plot, I've now discovered
the scatter function.

Things are pretty much how I want them now, but I still have a couple of
questions:

How do I get rid of the redundant ticks on the top and right edges?

Is there any way to stop some of my text labels from overlapping?

Why is there such a big gap between the plot itself and the axes ticks?
The scatter function seems to do this, but I don't see any option to
control the size of the gap. I wonder if I've done something weird like
create an axes within an axes. I would like to get rid of the gap because
it makes the graphic less readable, in particular it gives a misleading
impression about where (0,0) is located.

Here's my new source code:

rc('xtick.major',size=8)
rc('xtick',direction='out')
rc('ytick.major',size=8)
rc('ytick',direction='out')
fig = figure(facecolor='white' )
axes(frameon=False)
title('Comparison of lower- and upper-bounds per function in week one
and week two')
l =
scatter(functions.lowerboundsweek1,functions.lowerboundsweek2,marker='s',color='g')
u =
scatter(functions.upperboundsweek1,functions.upperboundsweek2,marker='^',color='b')
legend((l,u),('Lower-bounds','Upper-bounds'),'best')
plot([0,1],[0,1],color='#99',linestyle='--')
xlabel('Week 1')
ylabel('Week 2')
xticks(functions.upperboundsweek1+functions.lowerboundsweek1,'
'*len(functions.upperboundsweek1+functions.lowerboundsweek1))
yticks(functions.upperboundsweek2+functions.lowerboundsweek2,'
'*len(functions.upperboundsweek2+functions.lowerboundsweek2))
for function,x,y in
map(None,functions.shortnames,functions.upperboundsweek1,functions.upperboundsweek2):
annotate(function,xy=(x,y),size=8,color='b')   
for function,x,y in
map(None,functions.shortnames,functions.lowerboundsweek1,functions.lowerboundsweek2):
annotate(function,xy=(x,y),size=8,color='g') 


On Tue, 2008-02-26 at 16:51 +, chombee wrote:
 I'm having a couple of problems drawing a basic relational scatter plot.
 (Specifically, it's called a dot-dash-plot in the book I have and is
 described as framing the bivariate scatter with the marginal distribution
 of each variable.) The idea is that you have a bivariate scatter plot
 and use the two marginal frequency distributions of the data as the two
 axes.
 
 1. By setting the x and y tick length and using space characters as the
 tick labels I was able to get ticks only and no labels on the axes as I
 want. But these ticks appear along the top and right edges of the plot,
 as well as the left and bottom. Is there any way to get rid of the top
 and right ticks?
 
 2. I'm getting phantom numbers on my axes, the 0.2, 0.4, 0.6 etc. I
 don't know where these are coming from or what they measure (my data
 ranges from 0-7 on both axes, not 0-1).
 
 3. I want to label each data point with a string. I'm doing this with
 annotate but the strings sometimes overlap each other. Any idea how to
 avoid this?
 
 Here's a PNG of my plot as it is:
 
 http://img137.imageshack.us/img137/4015/scatterplotlk2.png
 
 And here's the source:
 
 # datax and datay are equal length lists of floats, the data I want to 
 # plot. labels is another equal length list containing the strings I 
 # want to label the data points with. All three lists are in the same
 # order.
 
 axes(frameon=False)
 rc('xtick.major',size=8)
 rc('xtick',direction='out')
 xticks(datax,' '*len(datax))
 rc('ytick.major',size=8)
 rc('ytick',direction='out')
 yticks(datay,' '*len(datay))
 plot(datax,datay,'r.')
 plot([0,7],[0,7])
 xlabel('Proportion of total number of cards, week 1')
 ylabel('Proportion of total number of cards, week 2')
 title('Frequency of cards per function')
 for label,x,y in map(None,labels,datax,datay):
 annotate(function,xy=(x,y),size=8)
 
 Thanks!
 
 
 
 -
 This SF.net email is sponsored by: Microsoft
 Defy all challenges. Microsoft(R) Visual Studio 2008.
 http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users





-
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] Scatterplot problem

2008-02-26 Thread chombee
I'm having a couple of problems drawing a basic relational scatter plot.
(Specifically, it's called a dot-dash-plot in the book I have and is
described as framing the bivariate scatter with the marginal distribution
of each variable.) The idea is that you have a bivariate scatter plot
and use the two marginal frequency distributions of the data as the two
axes.

1. By setting the x and y tick length and using space characters as the
tick labels I was able to get ticks only and no labels on the axes as I
want. But these ticks appear along the top and right edges of the plot,
as well as the left and bottom. Is there any way to get rid of the top
and right ticks?

2. I'm getting phantom numbers on my axes, the 0.2, 0.4, 0.6 etc. I
don't know where these are coming from or what they measure (my data
ranges from 0-7 on both axes, not 0-1).

3. I want to label each data point with a string. I'm doing this with
annotate but the strings sometimes overlap each other. Any idea how to
avoid this?

Here's a PNG of my plot as it is:

http://img137.imageshack.us/img137/4015/scatterplotlk2.png

And here's the source:

# datax and datay are equal length lists of floats, the data I want to 
# plot. labels is another equal length list containing the strings I 
# want to label the data points with. All three lists are in the same
# order.

axes(frameon=False)
rc('xtick.major',size=8)
rc('xtick',direction='out')
xticks(datax,' '*len(datax))
rc('ytick.major',size=8)
rc('ytick',direction='out')
yticks(datay,' '*len(datay))
plot(datax,datay,'r.')
plot([0,7],[0,7])
xlabel('Proportion of total number of cards, week 1')
ylabel('Proportion of total number of cards, week 2')
title('Frequency of cards per function')
for label,x,y in map(None,labels,datax,datay):
annotate(function,xy=(x,y),size=8)

Thanks!



-
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse012070mrt/direct/01/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users