From: Jeff L. <lay...@at...> - 2011-02-10 23:20:53
|
Good evening, I've been trying to find a way to move the legend outside the plot so it doesn't cover it up. I've seen some things online but I can quite get them to work (probably just my lack of knowledge about matplotlib). The section of code creating the plot looks like, fig = plt.figure() ax = fig.add_subplot(1,1,1); p1 = ax.bar(ind, IO_Time_Plot, width, color="r", align='center'); p2 = ax.bar(ind, Diff_Plot, width, color="y", bottom=IO_Time_Plot, align='center'); ax.set_ylabel('Time (secs)'); ax.set_title('Elapsed Time and IO Time',fontstyle='italic'); ax.set_xticks(ind); group_labels = []; for item in names: group_labels.append(item); ax.set_xticklabels(group_labels); fig.autofmt_xdate(); #ax.legend( bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.); ax.legend( (p1[0], p2[0]), ('IO Time', 'Total Elapsed Time')); You can see my attempt at moving the legend outside the bounding box but when I try this, the legend never appears. TIA! Jeff |
From: Jeff L. <lay...@at...> - 2011-02-10 23:39:26
|
I hate to be the first one to comment on this post but I forgot to give the error message and version of matplotlib. The error is, Traceback (most recent call last): File "./multi_file_test_2.py", line 460, in <module> ax.legend( (p1[0], p2[0]), ('IO Time', 'Total Elapsed Time'), bbox_to_anchor=(1.05, 1), loc=2); File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 3617, in legend self.legend_ = mlegend.Legend(self, handles, labels, **kwargs) TypeError: __init__() got an unexpected keyword argument 'bbox_to_anchor' The version of matplotlib I'm using is, 0.98.3-4ubuntu1 Jeff > Good evening, > > I've been trying to find a way to move the legend outside > the plot so it doesn't cover it up. I've seen some things > online but I can quite get them to work (probably just my > lack of knowledge about matplotlib). > > The section of code creating the plot looks like, > > fig = plt.figure() > ax = fig.add_subplot(1,1,1); > > p1 = ax.bar(ind, IO_Time_Plot, width, color="r", align='center'); > p2 = ax.bar(ind, Diff_Plot, width, color="y", > bottom=IO_Time_Plot, align='center'); > > ax.set_ylabel('Time (secs)'); > ax.set_title('Elapsed Time and IO Time',fontstyle='italic'); > ax.set_xticks(ind); > > group_labels = []; > for item in names: > group_labels.append(item); > > ax.set_xticklabels(group_labels); > > fig.autofmt_xdate(); > > #ax.legend( bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.); > ax.legend( (p1[0], p2[0]), ('IO Time', 'Total Elapsed Time')); > > > > You can see my attempt at moving the legend outside the bounding box > but when I try this, the legend never appears. > > TIA! > > Jeff > > > > ------------------------------------------------------------------------------ > The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: > Pinpoint memory and threading errors before they happen. > Find and fix more than 250 security defects in the development cycle. > Locate bottlenecks in serial and parallel code that limit performance. > http://p.sf.net/sfu/intel-dev2devfeb > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |
From: Jae-Joon L. <lee...@gm...> - 2011-02-11 08:48:28
|
On Fri, Feb 11, 2011 at 8:38 AM, Jeff Layton <lay...@at...> wrote: > I hate to be the first one to comment on this post but I forgot to give > the error message and version of matplotlib. The error is, > > Traceback (most recent call last): > File "./multi_file_test_2.py", line 460, in <module> > ax.legend( (p1[0], p2[0]), ('IO Time', 'Total Elapsed Time'), > bbox_to_anchor=(1.05, 1), loc=2); > File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line > 3617, in legend > self.legend_ = mlegend.Legend(self, handles, labels, **kwargs) > TypeError: __init__() got an unexpected keyword argument 'bbox_to_anchor' > > > The version of matplotlib I'm using is, 0.98.3-4ubuntu1 > > Jeff > I'm quite sure that the *bbox_to_anchor* parameter is introduced later than 0.98. I think you have a few options, * use "loc" parameter. * see if "figlegend" helps. * create a empty axes just for the purpose of drawing the legend. * upgrade to 1.0.1 and I highly recommend it if you can. Regards, -JJ > >> Good evening, >> >> I've been trying to find a way to move the legend outside >> the plot so it doesn't cover it up. I've seen some things >> online but I can quite get them to work (probably just my >> lack of knowledge about matplotlib). >> >> The section of code creating the plot looks like, >> >> fig = plt.figure() >> ax = fig.add_subplot(1,1,1); >> >> p1 = ax.bar(ind, IO_Time_Plot, width, color="r", align='center'); >> p2 = ax.bar(ind, Diff_Plot, width, color="y", >> bottom=IO_Time_Plot, align='center'); >> >> ax.set_ylabel('Time (secs)'); >> ax.set_title('Elapsed Time and IO Time',fontstyle='italic'); >> ax.set_xticks(ind); >> >> group_labels = []; >> for item in names: >> group_labels.append(item); >> >> ax.set_xticklabels(group_labels); >> >> fig.autofmt_xdate(); >> >> #ax.legend( bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.); >> ax.legend( (p1[0], p2[0]), ('IO Time', 'Total Elapsed Time')); >> >> >> >> You can see my attempt at moving the legend outside the bounding box >> but when I try this, the legend never appears. >> >> TIA! >> >> Jeff >> >> >> >> ------------------------------------------------------------------------------ >> The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: >> Pinpoint memory and threading errors before they happen. >> Find and fix more than 250 security defects in the development cycle. >> Locate bottlenecks in serial and parallel code that limit performance. >> http://p.sf.net/sfu/intel-dev2devfeb >> _______________________________________________ >> Matplotlib-users mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> > > > ------------------------------------------------------------------------------ > The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: > Pinpoint memory and threading errors before they happen. > Find and fix more than 250 security defects in the development cycle. > Locate bottlenecks in serial and parallel code that limit performance. > http://p.sf.net/sfu/intel-dev2devfeb > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |
From: Jeff L. <lay...@at...> - 2011-02-11 12:21:22
|
On 02/11/2011 03:48 AM, Jae-Joon Lee wrote: > On Fri, Feb 11, 2011 at 8:38 AM, Jeff Layton<lay...@at...> wrote: >> I hate to be the first one to comment on this post but I forgot to give >> the error message and version of matplotlib. The error is, >> >> Traceback (most recent call last): >> File "./multi_file_test_2.py", line 460, in<module> >> ax.legend( (p1[0], p2[0]), ('IO Time', 'Total Elapsed Time'), >> bbox_to_anchor=(1.05, 1), loc=2); >> File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line >> 3617, in legend >> self.legend_ = mlegend.Legend(self, handles, labels, **kwargs) >> TypeError: __init__() got an unexpected keyword argument 'bbox_to_anchor' >> >> >> The version of matplotlib I'm using is, 0.98.3-4ubuntu1 >> >> Jeff >> > I'm quite sure that the *bbox_to_anchor* parameter is introduced later > than 0.98. > I think you have a few options, > > * use "loc" parameter. > * see if "figlegend" helps. > * create a empty axes just for the purpose of drawing the legend. > * upgrade to 1.0.1 and I highly recommend it if you can. > > Regards, > > -JJ I was worried about that. I will try to update my system but it's an old Ubuntu 8.10 system. Looks like I have an excuse to upgrade Ubuntu :) Thanks! Jeff |
From: Gökhan S. <gok...@gm...> - 2011-02-10 23:52:05
|
Hi, I would simply try to attach the legend to the figure object instead of the axis. On Thu, Feb 10, 2011 at 4:20 PM, Jeff Layton <lay...@at...> wrote: > Good evening, > > I've been trying to find a way to move the legend outside > the plot so it doesn't cover it up. I've seen some things > online but I can quite get them to work (probably just my > lack of knowledge about matplotlib). > > The section of code creating the plot looks like, > > fig = plt.figure() > ax = fig.add_subplot(1,1,1); > > p1 = ax.bar(ind, IO_Time_Plot, width, color="r", align='center'); > p2 = ax.bar(ind, Diff_Plot, width, color="y", > bottom=IO_Time_Plot, align='center'); > > ax.set_ylabel('Time (secs)'); > ax.set_title('Elapsed Time and IO Time',fontstyle='italic'); > ax.set_xticks(ind); > > group_labels = []; > for item in names: > group_labels.append(item); > > ax.set_xticklabels(group_labels); > > fig.autofmt_xdate(); > > #ax.legend( bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.); > ax.legend( (p1[0], p2[0]), ('IO Time', 'Total Elapsed Time')); > > > > You can see my attempt at moving the legend outside the bounding box > but when I try this, the legend never appears. > > TIA! > > Jeff > > > > > ------------------------------------------------------------------------------ > The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: > Pinpoint memory and threading errors before they happen. > Find and fix more than 250 security defects in the development cycle. > Locate bottlenecks in serial and parallel code that limit performance. > http://p.sf.net/sfu/intel-dev2devfeb > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > -- Gökhan |
From: Paul A. L. <pau...@gm...> - 2011-02-11 07:18:23
Attachments:
plot.py
|
Matplotlib is great! I created all my figures in this paper [0] using matplotlib. I am impressed with the quality you get. I attach the plotting script for fig. 9, which does exactly what you want, I believe. There is a lot of other junk in there, so look for the "legend" function, it all happens in one line. Cheers, Paul. [0] http://arxiv.org/abs/1011.3399, the paper should appear in phys. rev. B soon. |