Re: [Matplotlib-users] Aligning xticks and labels with WeekdayLocator

2013-03-20 Thread Mark Lawrence
On 19/03/2013 18:35, Paul Hobson wrote:
 On Tue, Mar 19, 2013 at 11:30 AM, Paul Hobson pmhob...@gmail.com
 mailto:pmhob...@gmail.com wrote:

 On Mon, Mar 18, 2013 at 8:34 PM, Mark Lawrence
 breamore...@yahoo.co.uk
 mailto:breamore...@yahoo.co.uk wrote:

 Matplotlib 1.2.0, Windows Vista, Python 3.3.0.  I want the first
 major
 xtick label aligned with the first date that's plotted.  This never
 happens with the value of day below set in the range zero to
 six.  The
 first major tick label actually occurs as follows.

 Day Label date
 0   25/03/2013
 1   02/04/2013
 2   10/04/2013
 3   21/03/2013
 4   29/03/2013
 5   06/04/2013
 6   17/03/2013

 What am I doing wrong?

 If day is set to seven then no xticks are displayed but labels for
 14/03/2013 and 13/03/2014 are displayed.  I expected a ValueError or
 similar using this number.  Could you explain this behaviour please?

 import matplotlib.pyplot as plt
 from matplotlib.ticker import FormatStrFormatter, MultipleLocator
 from matplotlib.dates import DateFormatter, WeekdayLocator
 import datetime

 dates = [datetime.date(2013, 3, 14), datetime.date(2014, 3, 13)]
 values = [0, 1]
 plt.ylabel('Balance')
 plt.grid()
 ax = plt.subplot(111)
 plt.plot_date(dates, values, fmt = 'rx-')
 plt.axis(xmin=dates[0], xmax=dates[-1])
 day = ?
 ax.xaxis.set_major_locator(WeekdayLocator(byweekday=day,
 interval=4))
 ax.xaxis.set_minor_locator(WeekdayLocator(byweekday=day))
 ax.xaxis.set_major_formatter(DateFormatter('%d/%m/%y'))
 ax.yaxis.set_major_formatter(FormatStrFormatter('£%0.2f'))
 ax.yaxis.set_minor_locator(MultipleLocator(5))
 plt.setp(plt.gca().get_xticklabels(), rotation = 45, fontsize = 10)
 plt.setp(plt.gca().get_yticklabels(), fontsize = 10)
 plt.show()


 Mark,

 I've found that rotation_mode='anchor' works best when rotation != 0

 So that makes it:
 plt.setp(plt.gca().get_xticklabels(), rotation = 45, fontsize = 10,
   rotation_mode='anchor' )

 HTH,
 -paul



 I misread your question. Try setting your x-axis limits after defining
 the locators and formatters.
 -p



Please accept my apologies for the delay in replying, plus I should also 
have mentioned originally that I've only encountered this problem with 
WeekdayLocator.

Setting the x-axis limits after defining the locators and formatters 
makes no difference.

I've resolved my issue by reverting back to using MonthLocator, which I 
originally disliked as the minor tick locations made the display look 
poor around that darned month of February.  My solution has been to 
ignore all rrule type computing and use the following code.

xticks = ax.get_xticks()
minorTicks = []
for i,xt in enumerate(xticks, start=1):
 try:
 diff = (xticks[i] - xt) / 4
 for i in range(1, 4):
 minorTicks.append(xt + i * diff)
 except IndexError:
 pass
ax.set_xticks(minorTicks, minor=True)

It works a treat, but if there's a simpler solution please let me know :)

-- 
Cheers.

Mark Lawrence


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Aligning xticks and labels with WeekdayLocator

2013-03-19 Thread Paul Hobson
On Mon, Mar 18, 2013 at 8:34 PM, Mark Lawrence breamore...@yahoo.co.ukwrote:

 Matplotlib 1.2.0, Windows Vista, Python 3.3.0.  I want the first major
 xtick label aligned with the first date that's plotted.  This never
 happens with the value of day below set in the range zero to six.  The
 first major tick label actually occurs as follows.

 Day Label date
 0   25/03/2013
 1   02/04/2013
 2   10/04/2013
 3   21/03/2013
 4   29/03/2013
 5   06/04/2013
 6   17/03/2013

 What am I doing wrong?

 If day is set to seven then no xticks are displayed but labels for
 14/03/2013 and 13/03/2014 are displayed.  I expected a ValueError or
 similar using this number.  Could you explain this behaviour please?

 import matplotlib.pyplot as plt
 from matplotlib.ticker import FormatStrFormatter, MultipleLocator
 from matplotlib.dates import DateFormatter, WeekdayLocator
 import datetime

 dates = [datetime.date(2013, 3, 14), datetime.date(2014, 3, 13)]
 values = [0, 1]
 plt.ylabel('Balance')
 plt.grid()
 ax = plt.subplot(111)
 plt.plot_date(dates, values, fmt = 'rx-')
 plt.axis(xmin=dates[0], xmax=dates[-1])
 day = ?
 ax.xaxis.set_major_locator(WeekdayLocator(byweekday=day, interval=4))
 ax.xaxis.set_minor_locator(WeekdayLocator(byweekday=day))
 ax.xaxis.set_major_formatter(DateFormatter('%d/%m/%y'))
 ax.yaxis.set_major_formatter(FormatStrFormatter('£%0.2f'))
 ax.yaxis.set_minor_locator(MultipleLocator(5))
 plt.setp(plt.gca().get_xticklabels(), rotation = 45, fontsize = 10)
 plt.setp(plt.gca().get_yticklabels(), fontsize = 10)
 plt.show()


Mark,

I've found that rotation_mode='anchor' works best when rotation != 0

So that makes it:
plt.setp(plt.gca().get_xticklabels(), rotation = 45, fontsize = 10,
 rotation_mode='anchor' )

HTH,
-paul
--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Aligning xticks and labels with WeekdayLocator

2013-03-19 Thread Paul Hobson
On Tue, Mar 19, 2013 at 11:30 AM, Paul Hobson pmhob...@gmail.com wrote:

 On Mon, Mar 18, 2013 at 8:34 PM, Mark Lawrence breamore...@yahoo.co.ukwrote:

 Matplotlib 1.2.0, Windows Vista, Python 3.3.0.  I want the first major
 xtick label aligned with the first date that's plotted.  This never
 happens with the value of day below set in the range zero to six.  The
 first major tick label actually occurs as follows.

 Day Label date
 0   25/03/2013
 1   02/04/2013
 2   10/04/2013
 3   21/03/2013
 4   29/03/2013
 5   06/04/2013
 6   17/03/2013

 What am I doing wrong?

 If day is set to seven then no xticks are displayed but labels for
 14/03/2013 and 13/03/2014 are displayed.  I expected a ValueError or
 similar using this number.  Could you explain this behaviour please?

 import matplotlib.pyplot as plt
 from matplotlib.ticker import FormatStrFormatter, MultipleLocator
 from matplotlib.dates import DateFormatter, WeekdayLocator
 import datetime

 dates = [datetime.date(2013, 3, 14), datetime.date(2014, 3, 13)]
 values = [0, 1]
 plt.ylabel('Balance')
 plt.grid()
 ax = plt.subplot(111)
 plt.plot_date(dates, values, fmt = 'rx-')
 plt.axis(xmin=dates[0], xmax=dates[-1])
 day = ?
 ax.xaxis.set_major_locator(WeekdayLocator(byweekday=day, interval=4))
 ax.xaxis.set_minor_locator(WeekdayLocator(byweekday=day))
 ax.xaxis.set_major_formatter(DateFormatter('%d/%m/%y'))
 ax.yaxis.set_major_formatter(FormatStrFormatter('£%0.2f'))
 ax.yaxis.set_minor_locator(MultipleLocator(5))
 plt.setp(plt.gca().get_xticklabels(), rotation = 45, fontsize = 10)
 plt.setp(plt.gca().get_yticklabels(), fontsize = 10)
 plt.show()


 Mark,

 I've found that rotation_mode='anchor' works best when rotation != 0

 So that makes it:
 plt.setp(plt.gca().get_xticklabels(), rotation = 45, fontsize = 10,
  rotation_mode='anchor' )

 HTH,
 -paul



I misread your question. Try setting your x-axis limits after defining the
locators and formatters.
-p
--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] Aligning xticks and labels with WeekdayLocator

2013-03-18 Thread Mark Lawrence
Matplotlib 1.2.0, Windows Vista, Python 3.3.0.  I want the first major 
xtick label aligned with the first date that's plotted.  This never 
happens with the value of day below set in the range zero to six.  The 
first major tick label actually occurs as follows.

Day Label date
0   25/03/2013
1   02/04/2013
2   10/04/2013
3   21/03/2013
4   29/03/2013
5   06/04/2013
6   17/03/2013

What am I doing wrong?

If day is set to seven then no xticks are displayed but labels for 
14/03/2013 and 13/03/2014 are displayed.  I expected a ValueError or 
similar using this number.  Could you explain this behaviour please?

import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter, MultipleLocator
from matplotlib.dates import DateFormatter, WeekdayLocator
import datetime

dates = [datetime.date(2013, 3, 14), datetime.date(2014, 3, 13)]
values = [0, 1]
plt.ylabel('Balance')
plt.grid()
ax = plt.subplot(111)
plt.plot_date(dates, values, fmt = 'rx-')
plt.axis(xmin=dates[0], xmax=dates[-1])
day = ?
ax.xaxis.set_major_locator(WeekdayLocator(byweekday=day, interval=4))
ax.xaxis.set_minor_locator(WeekdayLocator(byweekday=day))
ax.xaxis.set_major_formatter(DateFormatter('%d/%m/%y'))
ax.yaxis.set_major_formatter(FormatStrFormatter('£%0.2f'))
ax.yaxis.set_minor_locator(MultipleLocator(5))
plt.setp(plt.gca().get_xticklabels(), rotation = 45, fontsize = 10)
plt.setp(plt.gca().get_yticklabels(), fontsize = 10)
plt.show()

-- 
Cheers.

Mark Lawrence


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users