Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Virgil Stokes
On 14-Feb-2015 02:29, Tommy Carstensen wrote:
 Is it possible to combine MultipleLocator and MaxNLocator? One seems
 to erase the effect of the other.

 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Tommy,
Perhaps you might find it useful to look at the Python class that Justin Talbot 
wrote (http://www.justintalbot.com/research/axis-labeling/). I find this very 
useful in my own work.




--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Tommy Carstensen
Thanks for you answer Eric. I had to get some sleep before trying out
things. I currently have the code below, but it does not remove the
zero value tick. It removes the tick at 5 and 10 however.

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.xaxis.set_major_locator(MultipleLocator(5))
xticks = ax1.xaxis.get_major_ticks()
#xticks[0].label1.set_visible(False)
#xticks[-1].label1.set_visible(False)
ax1.set_xticks(ax1.get_xticks()[1:-1])
ax1.plot(list(range(11)))
plt.show()

On Sat, Feb 14, 2015 at 2:01 AM, Eric Firing efir...@hawaii.edu wrote:
 On 2015/02/13 3:29 PM, Tommy Carstensen wrote:
 Is it possible to combine MultipleLocator and MaxNLocator? One seems
 to erase the effect of the other.

 They are for different situations.  MultipleLocator is for when you know
 what you want your tick interval to be; MaxNLocator is for when you
 don't know that, but you do know roughly how many ticks you want, and
 what sort of numerical intervals are acceptable.

 Eric


 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Ryan Nelson
Tommy, (Sorry for the doubleup. I just realized I forgot to hit reply-all.)

Do you want to remove the tick at 0 and only have 5,10, etc.? Could you
just do something like this instead:

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_xticks(range(5,11,5))
ax1.plot(range(11))
plt.show()

Ryan


On Sat, Feb 14, 2015 at 10:47 AM, Tommy Carstensen 
tommy.carsten...@gmail.com wrote:

 Thanks for you answer Eric. I had to get some sleep before trying out
 things. I currently have the code below, but it does not remove the
 zero value tick. It removes the tick at 5 and 10 however.

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.xaxis.set_major_locator(MultipleLocator(5))
 xticks = ax1.xaxis.get_major_ticks()
 #xticks[0].label1.set_visible(False)
 #xticks[-1].label1.set_visible(False)
 ax1.set_xticks(ax1.get_xticks()[1:-1])
 ax1.plot(list(range(11)))
 plt.show()

 On Sat, Feb 14, 2015 at 2:01 AM, Eric Firing efir...@hawaii.edu wrote:
  On 2015/02/13 3:29 PM, Tommy Carstensen wrote:
  Is it possible to combine MultipleLocator and MaxNLocator? One seems
  to erase the effect of the other.
 
  They are for different situations.  MultipleLocator is for when you know
  what you want your tick interval to be; MaxNLocator is for when you
  don't know that, but you do know roughly how many ticks you want, and
  what sort of numerical intervals are acceptable.
 
  Eric
 
 
 
 --
  Dive into the World of Parallel Programming. The Go Parallel Website,
  sponsored by Intel and developed in partnership with Slashdot Media, is
 your
  hub for all things parallel software development, from weekly thought
  leadership blogs to news, videos, case studies, tutorials and more. Take
 a
  look and join the conversation now. http://goparallel.sourceforge.net/
  ___
  Matplotlib-users mailing list
  Matplotlib-users@lists.sourceforge.net
  https://lists.sourceforge.net/lists/listinfo/matplotlib-users


 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is
 your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Eric Firing
On 2015/02/14 7:33 AM, Tommy Carstensen wrote:
 Thanks again Ryan. That's exactly what I want to achieve; i.e. remove
 the tick at 0 and only keep 5 and 10. Your solution works, but it's a
 bit of hack to use magic constants. I could however get those values
 from the xlim.

 Eric, I would describe the desired tick placement algorithm as
 removing the first tick on the axis. It can be achieved like this:
 ax1.xaxis.set_major_locator(MaxNLocator(prune='lower'))

Aha! The problem is that the MaxNLocator is the only one with the prune 
kwarg.  It could be added to the MultipleLocator.  For now, though, you 
can make your own specialized Locator, hardwired to omit the first tick, 
like this:

from matplotlib.ticker import MultipleLocator

class TrimmedMultipleLocator(MultipleLocator):
 def tick_values(self, vmin, vmax):
 return MultipleLocator.tick_values(self, vmin, vmax)[1:]

then just use

ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))

I haven't tested it--but give it a try.  What it is doing is making a 
subclass of MultipleLocator, and altering only the one little bit of its 
behavior that you want to modify.  Everything else is automatically 
inherited from the base class, MultipleLocator.

Eric



 But that then overrides this:
 ax1.xaxis.set_major_locator(MultipleLocator(5))

 On Sat, Feb 14, 2015 at 5:27 PM, Ryan Nelson rnelsonc...@gmail.com wrote:
 Tommy, (Sorry for the doubleup. I just realized I forgot to hit reply-all.)

 Do you want to remove the tick at 0 and only have 5,10, etc.? Could you just
 do something like this instead:

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.set_xticks(range(5,11,5))
 ax1.plot(range(11))
 plt.show()

 Ryan


 On Sat, Feb 14, 2015 at 10:47 AM, Tommy Carstensen
 tommy.carsten...@gmail.com wrote:

 Thanks for you answer Eric. I had to get some sleep before trying out
 things. I currently have the code below, but it does not remove the
 zero value tick. It removes the tick at 5 and 10 however.

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.xaxis.set_major_locator(MultipleLocator(5))
 xticks = ax1.xaxis.get_major_ticks()
 #xticks[0].label1.set_visible(False)
 #xticks[-1].label1.set_visible(False)
 ax1.set_xticks(ax1.get_xticks()[1:-1])
 ax1.plot(list(range(11)))
 plt.show()

 On Sat, Feb 14, 2015 at 2:01 AM, Eric Firing efir...@hawaii.edu wrote:
 On 2015/02/13 3:29 PM, Tommy Carstensen wrote:
 Is it possible to combine MultipleLocator and MaxNLocator? One seems
 to erase the effect of the other.

 They are for different situations.  MultipleLocator is for when you know
 what you want your tick interval to be; MaxNLocator is for when you
 don't know that, but you do know roughly how many ticks you want, and
 what sort of numerical intervals are acceptable.

 Eric



 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is
 your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take
 a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users


 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is
 your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users



 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users



--
Dive into the World of Parallel Programming. The Go Parallel 

Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Ryan Nelson
Tommy,

I'm sorry. I forgot to hit send all *again*. Below is my original message,
but the function I wrote is updated because it wasn't exactly correct

Ah. I was working on something to help out, so I'm just seeing Eric's very
elegant solution, which I have yet to try. However, I feel like you might
run into some problems if you always drop the first tick. For example, try
this plot:
__
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
import numpy as np
xs = np.linspace(2,12,1000)
ys = np.sin(xs)
n = 5
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(xs, ys)
ax1.xaxis.set_major_locator(MultipleLocator(5))
plt.show()
_
In this case, dropping the first tick will result in only one tick on the
screen.

What is your use-case? Are you annoyed that the axis labels are overlapping
at the far left? If that's the case, here's a little function (trimticks)
that I whipped up that might help. It drops the far left or far right label
if it is exactly at the edge of the axes. Should work for y axes as well.
_
def trimticks(ax, n=5):
xmin, xmax = ax.get_xlim()
if xmin%n == 0:
xmin = xmin+n
else:
xmin = xmin + n - xmin%n

if not xmax%n == 0:
xmax = xmax + n - xmax%n

ticks = np.arange(xmin, xmax, n)
ax.set_xticks(ticks)

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
import numpy as np
xs = np.linspace(0,20,1)
ys = np.sin(xs)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(xs, ys)
trimticks(ax1)
plt.show()

___


On Sat, Feb 14, 2015 at 1:45 PM, Tommy Carstensen 
tommy.carsten...@gmail.com wrote:

 Erik, that doesn't seem to work either. I tried this:

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 class TrimmedMultipleLocator(MultipleLocator):
  def tick_values(self, vmin, vmax):
  return MultipleLocator.tick_values(self, vmin, vmax)[2:]
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
 #xticks[0].label1.set_visible(False)
 #xticks[-1].label1.set_visible(False)
 #ax1.set_xticks(ax1.xaxis.get_major_ticks()[1:-1])
 ax1.plot(list(range(21)))
 plt.show()

 Here is an example of the use of prune='lower', but it does not allow
 one to set the tick step size:

 http://stackoverflow.com/questions/9422587/overlapping-y-axis-tick-label-and-x-axis-tick-label-in-matplotlib

 I think my best bet is to just set those ticks manually.

 On Sat, Feb 14, 2015 at 6:19 PM, Eric Firing efir...@hawaii.edu wrote:
  On 2015/02/14 7:33 AM, Tommy Carstensen wrote:
  Thanks again Ryan. That's exactly what I want to achieve; i.e. remove
  the tick at 0 and only keep 5 and 10. Your solution works, but it's a
  bit of hack to use magic constants. I could however get those values
  from the xlim.
 
  Eric, I would describe the desired tick placement algorithm as
  removing the first tick on the axis. It can be achieved like this:
  ax1.xaxis.set_major_locator(MaxNLocator(prune='lower'))
 
  Aha! The problem is that the MaxNLocator is the only one with the prune
  kwarg.  It could be added to the MultipleLocator.  For now, though, you
  can make your own specialized Locator, hardwired to omit the first tick,
  like this:
 
  from matplotlib.ticker import MultipleLocator
 
  class TrimmedMultipleLocator(MultipleLocator):
   def tick_values(self, vmin, vmax):
   return MultipleLocator.tick_values(self, vmin, vmax)[1:]
 
  then just use
 
  ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
 
  I haven't tested it--but give it a try.  What it is doing is making a
  subclass of MultipleLocator, and altering only the one little bit of its
  behavior that you want to modify.  Everything else is automatically
  inherited from the base class, MultipleLocator.
 
  Eric
 
 
 
  But that then overrides this:
  ax1.xaxis.set_major_locator(MultipleLocator(5))
 
  On Sat, Feb 14, 2015 at 5:27 PM, Ryan Nelson rnelsonc...@gmail.com
 wrote:
  Tommy, (Sorry for the doubleup. I just realized I forgot to hit
 reply-all.)
 
  Do you want to remove the tick at 0 and only have 5,10, etc.? Could
 you just
  do something like this instead:
 
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.set_xticks(range(5,11,5))
  ax1.plot(range(11))
  plt.show()
 
  Ryan
 
 
  On Sat, Feb 14, 2015 at 10:47 AM, Tommy Carstensen
  tommy.carsten...@gmail.com wrote:
 
  Thanks for you answer Eric. I had to get some sleep before trying out
  things. I currently have the code below, but it does not remove the
  zero value tick. It removes the tick at 5 and 10 however.
 
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.xaxis.set_major_locator(MultipleLocator(5))
  xticks = ax1.xaxis.get_major_ticks()
  

Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Eric Firing
On 2015/02/14 5:47 AM, Tommy Carstensen wrote:
 Thanks for you answer Eric. I had to get some sleep before trying out
 things. I currently have the code below, but it does not remove the
 zero value tick. It removes the tick at 5 and 10 however.

What is the effect you are trying to achieve?  How would you describe 
the desired tick placement algorithm?

Eric


 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.xaxis.set_major_locator(MultipleLocator(5))
 xticks = ax1.xaxis.get_major_ticks()
 #xticks[0].label1.set_visible(False)
 #xticks[-1].label1.set_visible(False)
 ax1.set_xticks(ax1.get_xticks()[1:-1])
 ax1.plot(list(range(11)))
 plt.show()

 On Sat, Feb 14, 2015 at 2:01 AM, Eric Firing efir...@hawaii.edu wrote:
 On 2015/02/13 3:29 PM, Tommy Carstensen wrote:
 Is it possible to combine MultipleLocator and MaxNLocator? One seems
 to erase the effect of the other.

 They are for different situations.  MultipleLocator is for when you know
 what you want your tick interval to be; MaxNLocator is for when you
 don't know that, but you do know roughly how many ticks you want, and
 what sort of numerical intervals are acceptable.

 Eric


 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users


--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Tommy Carstensen
Erik, that doesn't seem to work either. I tried this:

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
class TrimmedMultipleLocator(MultipleLocator):
 def tick_values(self, vmin, vmax):
 return MultipleLocator.tick_values(self, vmin, vmax)[2:]
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
#xticks[0].label1.set_visible(False)
#xticks[-1].label1.set_visible(False)
#ax1.set_xticks(ax1.xaxis.get_major_ticks()[1:-1])
ax1.plot(list(range(21)))
plt.show()

Here is an example of the use of prune='lower', but it does not allow
one to set the tick step size:
http://stackoverflow.com/questions/9422587/overlapping-y-axis-tick-label-and-x-axis-tick-label-in-matplotlib

I think my best bet is to just set those ticks manually.

On Sat, Feb 14, 2015 at 6:19 PM, Eric Firing efir...@hawaii.edu wrote:
 On 2015/02/14 7:33 AM, Tommy Carstensen wrote:
 Thanks again Ryan. That's exactly what I want to achieve; i.e. remove
 the tick at 0 and only keep 5 and 10. Your solution works, but it's a
 bit of hack to use magic constants. I could however get those values
 from the xlim.

 Eric, I would describe the desired tick placement algorithm as
 removing the first tick on the axis. It can be achieved like this:
 ax1.xaxis.set_major_locator(MaxNLocator(prune='lower'))

 Aha! The problem is that the MaxNLocator is the only one with the prune
 kwarg.  It could be added to the MultipleLocator.  For now, though, you
 can make your own specialized Locator, hardwired to omit the first tick,
 like this:

 from matplotlib.ticker import MultipleLocator

 class TrimmedMultipleLocator(MultipleLocator):
  def tick_values(self, vmin, vmax):
  return MultipleLocator.tick_values(self, vmin, vmax)[1:]

 then just use

 ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))

 I haven't tested it--but give it a try.  What it is doing is making a
 subclass of MultipleLocator, and altering only the one little bit of its
 behavior that you want to modify.  Everything else is automatically
 inherited from the base class, MultipleLocator.

 Eric



 But that then overrides this:
 ax1.xaxis.set_major_locator(MultipleLocator(5))

 On Sat, Feb 14, 2015 at 5:27 PM, Ryan Nelson rnelsonc...@gmail.com wrote:
 Tommy, (Sorry for the doubleup. I just realized I forgot to hit reply-all.)

 Do you want to remove the tick at 0 and only have 5,10, etc.? Could you just
 do something like this instead:

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.set_xticks(range(5,11,5))
 ax1.plot(range(11))
 plt.show()

 Ryan


 On Sat, Feb 14, 2015 at 10:47 AM, Tommy Carstensen
 tommy.carsten...@gmail.com wrote:

 Thanks for you answer Eric. I had to get some sleep before trying out
 things. I currently have the code below, but it does not remove the
 zero value tick. It removes the tick at 5 and 10 however.

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.xaxis.set_major_locator(MultipleLocator(5))
 xticks = ax1.xaxis.get_major_ticks()
 #xticks[0].label1.set_visible(False)
 #xticks[-1].label1.set_visible(False)
 ax1.set_xticks(ax1.get_xticks()[1:-1])
 ax1.plot(list(range(11)))
 plt.show()

 On Sat, Feb 14, 2015 at 2:01 AM, Eric Firing efir...@hawaii.edu wrote:
 On 2015/02/13 3:29 PM, Tommy Carstensen wrote:
 Is it possible to combine MultipleLocator and MaxNLocator? One seems
 to erase the effect of the other.

 They are for different situations.  MultipleLocator is for when you know
 what you want your tick interval to be; MaxNLocator is for when you
 don't know that, but you do know roughly how many ticks you want, and
 what sort of numerical intervals are acceptable.

 Eric



 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is
 your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take
 a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users


 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is
 your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 

Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Tommy Carstensen
Eric, it works if I do:
 return MultipleLocator.tick_values(self, vmin, vmax)[2:]

But not if I do as first suggested by you:
 return MultipleLocator.tick_values(self, vmin, vmax)[1:]

I don't understand this behaviour. It should be [1:]. I'll just set
the ticks manually. Seems to be the easiest thing. It would be
awesome, if MPL had the same behaviour as gnuplot, which allows me to
simply do:
set xtics start, incr

On Sat, Feb 14, 2015 at 7:09 PM, Eric Firing efir...@hawaii.edu wrote:
 On 2015/02/14 8:45 AM, Tommy Carstensen wrote:

 Erik, that doesn't seem to work either. I tried this:

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 class TrimmedMultipleLocator(MultipleLocator):
   def tick_values(self, vmin, vmax):
   return MultipleLocator.tick_values(self, vmin, vmax)[2:]
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
 #xticks[0].label1.set_visible(False)
 #xticks[-1].label1.set_visible(False)
 #ax1.set_xticks(ax1.xaxis.get_major_ticks()[1:-1])
 ax1.plot(list(range(21)))
 plt.show()


 Are you sure?  I tried it, and it works for me.  See attached script and
 output.

 Eric


--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Eric Firing

On 2015/02/14 8:45 AM, Tommy Carstensen wrote:

Erik, that doesn't seem to work either. I tried this:

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
class TrimmedMultipleLocator(MultipleLocator):
  def tick_values(self, vmin, vmax):
  return MultipleLocator.tick_values(self, vmin, vmax)[2:]
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
#xticks[0].label1.set_visible(False)
#xticks[-1].label1.set_visible(False)
#ax1.set_xticks(ax1.xaxis.get_major_ticks()[1:-1])
ax1.plot(list(range(21)))
plt.show()


Are you sure?  I tried it, and it works for me.  See attached script and 
output.


Eric



test_loc.pdf
Description: Adobe PDF document
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator

class TrimmedMultipleLocator(MultipleLocator):
 def tick_values(self, vmin, vmax):
 return MultipleLocator.tick_values(self, vmin, vmax)[2:]

fig, ax1 = plt.subplots()
ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
ax1.plot(list(range(21)))

fig.savefig('test_loc.pdf')
--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Tommy Carstensen
Ryan, my use case is indeed that I want to avoid overlapping ticks and
I want to avoid them by not displaying them. Here is a guy with the
same problem:
http://stackoverflow.com/questions/9422587/overlapping-y-axis-tick-label-and-x-axis-tick-label-in-matplotlib

Here is the problem at the top left of my plot:
www.tommycarstensen.com/matplotlib.png

I'll just set the ticks manually. Sadly seems like the easiest thing to do.

On Sat, Feb 14, 2015 at 7:01 PM, Ryan Nelson rnelsonc...@gmail.com wrote:
 Tommy,

 I'm sorry. I forgot to hit send all *again*. Below is my original message,
 but the function I wrote is updated because it wasn't exactly correct

 Ah. I was working on something to help out, so I'm just seeing Eric's very
 elegant solution, which I have yet to try. However, I feel like you might
 run into some problems if you always drop the first tick. For example, try
 this plot:
 __
 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 import numpy as np
 xs = np.linspace(2,12,1000)
 ys = np.sin(xs)
 n = 5
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.plot(xs, ys)
 ax1.xaxis.set_major_locator(MultipleLocator(5))
 plt.show()
 _
 In this case, dropping the first tick will result in only one tick on the
 screen.

 What is your use-case? Are you annoyed that the axis labels are overlapping
 at the far left? If that's the case, here's a little function (trimticks)
 that I whipped up that might help. It drops the far left or far right label
 if it is exactly at the edge of the axes. Should work for y axes as well.
 _
 def trimticks(ax, n=5):
 xmin, xmax = ax.get_xlim()
 if xmin%n == 0:
 xmin = xmin+n
 else:
 xmin = xmin + n - xmin%n

 if not xmax%n == 0:
 xmax = xmax + n - xmax%n

 ticks = np.arange(xmin, xmax, n)
 ax.set_xticks(ticks)

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 import numpy as np
 xs = np.linspace(0,20,1)
 ys = np.sin(xs)
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.plot(xs, ys)
 trimticks(ax1)
 plt.show()

 ___


 On Sat, Feb 14, 2015 at 1:45 PM, Tommy Carstensen
 tommy.carsten...@gmail.com wrote:

 Erik, that doesn't seem to work either. I tried this:

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 class TrimmedMultipleLocator(MultipleLocator):
  def tick_values(self, vmin, vmax):
  return MultipleLocator.tick_values(self, vmin, vmax)[2:]
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
 #xticks[0].label1.set_visible(False)
 #xticks[-1].label1.set_visible(False)
 #ax1.set_xticks(ax1.xaxis.get_major_ticks()[1:-1])
 ax1.plot(list(range(21)))
 plt.show()

 Here is an example of the use of prune='lower', but it does not allow
 one to set the tick step size:

 http://stackoverflow.com/questions/9422587/overlapping-y-axis-tick-label-and-x-axis-tick-label-in-matplotlib

 I think my best bet is to just set those ticks manually.

 On Sat, Feb 14, 2015 at 6:19 PM, Eric Firing efir...@hawaii.edu wrote:
  On 2015/02/14 7:33 AM, Tommy Carstensen wrote:
  Thanks again Ryan. That's exactly what I want to achieve; i.e. remove
  the tick at 0 and only keep 5 and 10. Your solution works, but it's a
  bit of hack to use magic constants. I could however get those values
  from the xlim.
 
  Eric, I would describe the desired tick placement algorithm as
  removing the first tick on the axis. It can be achieved like this:
  ax1.xaxis.set_major_locator(MaxNLocator(prune='lower'))
 
  Aha! The problem is that the MaxNLocator is the only one with the prune
  kwarg.  It could be added to the MultipleLocator.  For now, though, you
  can make your own specialized Locator, hardwired to omit the first tick,
  like this:
 
  from matplotlib.ticker import MultipleLocator
 
  class TrimmedMultipleLocator(MultipleLocator):
   def tick_values(self, vmin, vmax):
   return MultipleLocator.tick_values(self, vmin, vmax)[1:]
 
  then just use
 
  ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
 
  I haven't tested it--but give it a try.  What it is doing is making a
  subclass of MultipleLocator, and altering only the one little bit of its
  behavior that you want to modify.  Everything else is automatically
  inherited from the base class, MultipleLocator.
 
  Eric
 
 
 
  But that then overrides this:
  ax1.xaxis.set_major_locator(MultipleLocator(5))
 
  On Sat, Feb 14, 2015 at 5:27 PM, Ryan Nelson rnelsonc...@gmail.com
  wrote:
  Tommy, (Sorry for the doubleup. I just realized I forgot to hit
  reply-all.)
 
  Do you want to remove the tick at 0 and only have 5,10, etc.? Could
  you just
  do something like this instead:
 
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.set_xticks(range(5,11,5))
  ax1.plot(range(11))
  plt.show()
 

Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Tommy Carstensen
Thanks again Ryan. That's exactly what I want to achieve; i.e. remove
the tick at 0 and only keep 5 and 10. Your solution works, but it's a
bit of hack to use magic constants. I could however get those values
from the xlim.

Eric, I would describe the desired tick placement algorithm as
removing the first tick on the axis. It can be achieved like this:
ax1.xaxis.set_major_locator(MaxNLocator(prune='lower'))

But that then overrides this:
ax1.xaxis.set_major_locator(MultipleLocator(5))

On Sat, Feb 14, 2015 at 5:27 PM, Ryan Nelson rnelsonc...@gmail.com wrote:
 Tommy, (Sorry for the doubleup. I just realized I forgot to hit reply-all.)

 Do you want to remove the tick at 0 and only have 5,10, etc.? Could you just
 do something like this instead:

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.set_xticks(range(5,11,5))
 ax1.plot(range(11))
 plt.show()

 Ryan


 On Sat, Feb 14, 2015 at 10:47 AM, Tommy Carstensen
 tommy.carsten...@gmail.com wrote:

 Thanks for you answer Eric. I had to get some sleep before trying out
 things. I currently have the code below, but it does not remove the
 zero value tick. It removes the tick at 5 and 10 however.

 import matplotlib.pyplot as plt
 from matplotlib.ticker import MultipleLocator
 fig = plt.figure()
 ax1 = fig.add_subplot(111)
 ax1.xaxis.set_major_locator(MultipleLocator(5))
 xticks = ax1.xaxis.get_major_ticks()
 #xticks[0].label1.set_visible(False)
 #xticks[-1].label1.set_visible(False)
 ax1.set_xticks(ax1.get_xticks()[1:-1])
 ax1.plot(list(range(11)))
 plt.show()

 On Sat, Feb 14, 2015 at 2:01 AM, Eric Firing efir...@hawaii.edu wrote:
  On 2015/02/13 3:29 PM, Tommy Carstensen wrote:
  Is it possible to combine MultipleLocator and MaxNLocator? One seems
  to erase the effect of the other.
 
  They are for different situations.  MultipleLocator is for when you know
  what you want your tick interval to be; MaxNLocator is for when you
  don't know that, but you do know roughly how many ticks you want, and
  what sort of numerical intervals are acceptable.
 
  Eric
 
 
 
  --
  Dive into the World of Parallel Programming. The Go Parallel Website,
  sponsored by Intel and developed in partnership with Slashdot Media, is
  your
  hub for all things parallel software development, from weekly thought
  leadership blogs to news, videos, case studies, tutorials and more. Take
  a
  look and join the conversation now. http://goparallel.sourceforge.net/
  ___
  Matplotlib-users mailing list
  Matplotlib-users@lists.sourceforge.net
  https://lists.sourceforge.net/lists/listinfo/matplotlib-users


 --
 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is
 your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take a
 look and join the conversation now. http://goparallel.sourceforge.net/
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users



--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Eric Firing
On 2015/02/14 9:15 AM, Tommy Carstensen wrote:
 Eric, it works if I do:
   return MultipleLocator.tick_values(self, vmin, vmax)[2:]

 But not if I do as first suggested by you:
   return MultipleLocator.tick_values(self, vmin, vmax)[1:]


Are you using my test script but getting a different result?  If not, 
what is the difference in your test script?

 I don't understand this behaviour. It should be [1:]. I'll just set
 the ticks manually. Seems to be the easiest thing. It would be
 awesome, if MPL had the same behaviour as gnuplot, which allows me to
 simply do:
 set xtics start, incr

def xtics(ax, start, incr):
 stop = ax.dataLim.x1 + 0.01 * incr
 ax.xaxis.set_ticks(np.arange(start, stop, incr))


Now invoke that function *after* all your plot calls, so that the 
dataLim bounding box includes all the data in your plot.

Eric

--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Tommy Carstensen
Ryan, I stopped using gnuplot, because it requires the data to be
formatted in very specific ways :) I remember having functions just to
format the input data correctly for heat plots and the wrapper scripts
I wrote were quite convoluted. Matplotlib has its advantages for sure.
Otherwise I would not have switched. I'm just frustrated with being
back at the start line. Thanks for your help and bearing with my
impatience.

On Sat, Feb 14, 2015 at 7:42 PM, Ryan Nelson rnelsonc...@gmail.com wrote:
 Yep. I see your problem. My function and Eric's object should help here.

 A sore-spot with many folks coming over to Matplotlib from X is the fact
 that MPL does not calculate the size of text until the plot is generated.
 That means it doesn't always get text positioning, etc. exactly correct.
 That takes a little getting used to, and for me, it is minor.

 Admit it, Gnuplot as it's quirks as well :)  I always hated that it wouldn't
 cut off some markers at the edge of the screen. For example, with Gnuplot
 4.6rev5 the following
 plot x with points ps 7
 Leads to a bunch of markers running over the axes limits. (Maybe there is a
 way to fix this now. Many years ago that was not the case.)

 Ryan

 On Sat, Feb 14, 2015 at 2:18 PM, Tommy Carstensen
 tommy.carsten...@gmail.com wrote:

 Ryan, my use case is indeed that I want to avoid overlapping ticks and
 I want to avoid them by not displaying them. Here is a guy with the
 same problem:

 http://stackoverflow.com/questions/9422587/overlapping-y-axis-tick-label-and-x-axis-tick-label-in-matplotlib

 Here is the problem at the top left of my plot:
 www.tommycarstensen.com/matplotlib.png

 I'll just set the ticks manually. Sadly seems like the easiest thing to
 do.

 On Sat, Feb 14, 2015 at 7:01 PM, Ryan Nelson rnelsonc...@gmail.com
 wrote:
  Tommy,
 
  I'm sorry. I forgot to hit send all *again*. Below is my original
  message,
  but the function I wrote is updated because it wasn't exactly
  correct
 
  Ah. I was working on something to help out, so I'm just seeing Eric's
  very
  elegant solution, which I have yet to try. However, I feel like you
  might
  run into some problems if you always drop the first tick. For example,
  try
  this plot:
  __
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  import numpy as np
  xs = np.linspace(2,12,1000)
  ys = np.sin(xs)
  n = 5
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.plot(xs, ys)
  ax1.xaxis.set_major_locator(MultipleLocator(5))
  plt.show()
  _
  In this case, dropping the first tick will result in only one tick on
  the
  screen.
 
  What is your use-case? Are you annoyed that the axis labels are
  overlapping
  at the far left? If that's the case, here's a little function
  (trimticks)
  that I whipped up that might help. It drops the far left or far right
  label
  if it is exactly at the edge of the axes. Should work for y axes as
  well.
  _
  def trimticks(ax, n=5):
  xmin, xmax = ax.get_xlim()
  if xmin%n == 0:
  xmin = xmin+n
  else:
  xmin = xmin + n - xmin%n
 
  if not xmax%n == 0:
  xmax = xmax + n - xmax%n
 
  ticks = np.arange(xmin, xmax, n)
  ax.set_xticks(ticks)
 
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  import numpy as np
  xs = np.linspace(0,20,1)
  ys = np.sin(xs)
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.plot(xs, ys)
  trimticks(ax1)
  plt.show()
 
  ___
 
 
  On Sat, Feb 14, 2015 at 1:45 PM, Tommy Carstensen
  tommy.carsten...@gmail.com wrote:
 
  Erik, that doesn't seem to work either. I tried this:
 
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  class TrimmedMultipleLocator(MultipleLocator):
   def tick_values(self, vmin, vmax):
   return MultipleLocator.tick_values(self, vmin, vmax)[2:]
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
  #xticks[0].label1.set_visible(False)
  #xticks[-1].label1.set_visible(False)
  #ax1.set_xticks(ax1.xaxis.get_major_ticks()[1:-1])
  ax1.plot(list(range(21)))
  plt.show()
 
  Here is an example of the use of prune='lower', but it does not allow
  one to set the tick step size:
 
 
  http://stackoverflow.com/questions/9422587/overlapping-y-axis-tick-label-and-x-axis-tick-label-in-matplotlib
 
  I think my best bet is to just set those ticks manually.
 
  On Sat, Feb 14, 2015 at 6:19 PM, Eric Firing efir...@hawaii.edu
  wrote:
   On 2015/02/14 7:33 AM, Tommy Carstensen wrote:
   Thanks again Ryan. That's exactly what I want to achieve; i.e.
   remove
   the tick at 0 and only keep 5 and 10. Your solution works, but it's
   a
   bit of hack to use magic constants. I could however get those values
   from the xlim.
  
   Eric, I would describe the desired tick placement algorithm as
   removing the first tick on the axis. It can be achieved like this:
  

Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Ryan Nelson
Yep. I see your problem. My function and Eric's object should help here.

A sore-spot with many folks coming over to Matplotlib from X is the fact
that MPL does not calculate the size of text until the plot is generated.
That means it doesn't always get text positioning, etc. exactly correct.
That takes a little getting used to, and for me, it is minor.

Admit it, Gnuplot as it's quirks as well :)  I always hated that it
wouldn't cut off some markers at the edge of the screen. For example, with
Gnuplot 4.6rev5 the following
plot x with points ps 7
Leads to a bunch of markers running over the axes limits. (Maybe there is a
way to fix this now. Many years ago that was not the case.)

Ryan

On Sat, Feb 14, 2015 at 2:18 PM, Tommy Carstensen 
tommy.carsten...@gmail.com wrote:

 Ryan, my use case is indeed that I want to avoid overlapping ticks and
 I want to avoid them by not displaying them. Here is a guy with the
 same problem:

 http://stackoverflow.com/questions/9422587/overlapping-y-axis-tick-label-and-x-axis-tick-label-in-matplotlib

 Here is the problem at the top left of my plot:
 www.tommycarstensen.com/matplotlib.png

 I'll just set the ticks manually. Sadly seems like the easiest thing to do.

 On Sat, Feb 14, 2015 at 7:01 PM, Ryan Nelson rnelsonc...@gmail.com
 wrote:
  Tommy,
 
  I'm sorry. I forgot to hit send all *again*. Below is my original
 message,
  but the function I wrote is updated because it wasn't exactly correct
 
  Ah. I was working on something to help out, so I'm just seeing Eric's
 very
  elegant solution, which I have yet to try. However, I feel like you might
  run into some problems if you always drop the first tick. For example,
 try
  this plot:
  __
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  import numpy as np
  xs = np.linspace(2,12,1000)
  ys = np.sin(xs)
  n = 5
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.plot(xs, ys)
  ax1.xaxis.set_major_locator(MultipleLocator(5))
  plt.show()
  _
  In this case, dropping the first tick will result in only one tick on the
  screen.
 
  What is your use-case? Are you annoyed that the axis labels are
 overlapping
  at the far left? If that's the case, here's a little function (trimticks)
  that I whipped up that might help. It drops the far left or far right
 label
  if it is exactly at the edge of the axes. Should work for y axes as well.
  _
  def trimticks(ax, n=5):
  xmin, xmax = ax.get_xlim()
  if xmin%n == 0:
  xmin = xmin+n
  else:
  xmin = xmin + n - xmin%n
 
  if not xmax%n == 0:
  xmax = xmax + n - xmax%n
 
  ticks = np.arange(xmin, xmax, n)
  ax.set_xticks(ticks)
 
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  import numpy as np
  xs = np.linspace(0,20,1)
  ys = np.sin(xs)
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.plot(xs, ys)
  trimticks(ax1)
  plt.show()
 
  ___
 
 
  On Sat, Feb 14, 2015 at 1:45 PM, Tommy Carstensen
  tommy.carsten...@gmail.com wrote:
 
  Erik, that doesn't seem to work either. I tried this:
 
  import matplotlib.pyplot as plt
  from matplotlib.ticker import MultipleLocator
  class TrimmedMultipleLocator(MultipleLocator):
   def tick_values(self, vmin, vmax):
   return MultipleLocator.tick_values(self, vmin, vmax)[2:]
  fig = plt.figure()
  ax1 = fig.add_subplot(111)
  ax1.xaxis.set_major_locator(TrimmedMultipleLocator(5))
  #xticks[0].label1.set_visible(False)
  #xticks[-1].label1.set_visible(False)
  #ax1.set_xticks(ax1.xaxis.get_major_ticks()[1:-1])
  ax1.plot(list(range(21)))
  plt.show()
 
  Here is an example of the use of prune='lower', but it does not allow
  one to set the tick step size:
 
 
 http://stackoverflow.com/questions/9422587/overlapping-y-axis-tick-label-and-x-axis-tick-label-in-matplotlib
 
  I think my best bet is to just set those ticks manually.
 
  On Sat, Feb 14, 2015 at 6:19 PM, Eric Firing efir...@hawaii.edu
 wrote:
   On 2015/02/14 7:33 AM, Tommy Carstensen wrote:
   Thanks again Ryan. That's exactly what I want to achieve; i.e. remove
   the tick at 0 and only keep 5 and 10. Your solution works, but it's a
   bit of hack to use magic constants. I could however get those values
   from the xlim.
  
   Eric, I would describe the desired tick placement algorithm as
   removing the first tick on the axis. It can be achieved like this:
   ax1.xaxis.set_major_locator(MaxNLocator(prune='lower'))
  
   Aha! The problem is that the MaxNLocator is the only one with the
 prune
   kwarg.  It could be added to the MultipleLocator.  For now, though,
 you
   can make your own specialized Locator, hardwired to omit the first
 tick,
   like this:
  
   from matplotlib.ticker import MultipleLocator
  
   class TrimmedMultipleLocator(MultipleLocator):
def tick_values(self, vmin, vmax):
return MultipleLocator.tick_values(self, vmin, vmax)[1:]
  
   then just 

Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-14 Thread Tommy Carstensen
Thanks Eric. I decided to get peace of mind and just set the tick
labels manually. I can't afford to spend several hours on all of my
plots. I appreciate your help a lot.

On Sat, Feb 14, 2015 at 7:37 PM, Eric Firing efir...@hawaii.edu wrote:
 On 2015/02/14 9:15 AM, Tommy Carstensen wrote:

 Eric, it works if I do:
   return MultipleLocator.tick_values(self, vmin, vmax)[2:]

 But not if I do as first suggested by you:
   return MultipleLocator.tick_values(self, vmin, vmax)[1:]


 Are you using my test script but getting a different result?  If not, what
 is the difference in your test script?

 I don't understand this behaviour. It should be [1:]. I'll just set
 the ticks manually. Seems to be the easiest thing. It would be
 awesome, if MPL had the same behaviour as gnuplot, which allows me to
 simply do:
 set xtics start, incr


 def xtics(ax, start, incr):
 stop = ax.dataLim.x1 + 0.01 * incr
 ax.xaxis.set_ticks(np.arange(start, stop, incr))


 Now invoke that function *after* all your plot calls, so that the dataLim
 bounding box includes all the data in your plot.

 Eric

--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-13 Thread Tommy Carstensen
Is it possible to combine MultipleLocator and MaxNLocator? One seems
to erase the effect of the other.

--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] MultipleLocator and MaxNLocator

2015-02-13 Thread Eric Firing
On 2015/02/13 3:29 PM, Tommy Carstensen wrote:
 Is it possible to combine MultipleLocator and MaxNLocator? One seems
 to erase the effect of the other.

They are for different situations.  MultipleLocator is for when you know 
what you want your tick interval to be; MaxNLocator is for when you 
don't know that, but you do know roughly how many ticks you want, and 
what sort of numerical intervals are acceptable.

Eric


--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users