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