Re: [Matplotlib-users] Aligning xticks and labels with WeekdayLocator
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
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
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
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