From 9077a75bf3231c37f475d699833f364b9ea688da Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Sun, 6 Jan 2013 16:45:10 +0100 Subject: [PATCH 01/10] Typo in docstring. --- lib/matplotlib/legend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py index 087cd90f13a7..3c522ab6eb3f 100644 --- a/lib/matplotlib/legend.py +++ b/lib/matplotlib/legend.py @@ -108,7 +108,7 @@ class Legend(Artist): 'upper center' : 9, 'center' : 10, - loc can be a tuple of the noramilzed coordinate values with + loc can be a tuple of the normalized coordinate values with respect its parent. """ From 8cc3c083a7bcffd463ca04cdb0be0456aaa1157c Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Sun, 6 Jan 2013 16:46:35 +0100 Subject: [PATCH 02/10] Only set 'consider' if no value was supplied. --- lib/matplotlib/legend.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py index 3c522ab6eb3f..a54c7e277ec3 100644 --- a/lib/matplotlib/legend.py +++ b/lib/matplotlib/legend.py @@ -915,10 +915,11 @@ def _find_best_position(self, width, height, renderer, consider=None): verts, bboxes, lines = self._auto_legend_data() bbox = Bbox.from_bounds(0, 0, width, height) - consider = [self._get_anchored_bbox(x, bbox, self.get_bbox_to_anchor(), - renderer) - for x - in range(1, len(self.codes))] + if consider is None: + consider = [self._get_anchored_bbox(x, bbox, + self.get_bbox_to_anchor(), + renderer) + for x in range(1, len(self.codes))] #tx, ty = self.legendPatch.get_x(), self.legendPatch.get_y() From 96c0dca0b770d480817b936a48065765ba704a98 Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Sun, 6 Jan 2013 16:53:59 +0100 Subject: [PATCH 03/10] Fix bug in _auto_legend_data which caused the vertex list to always be empty. --- lib/matplotlib/legend.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py index a54c7e277ec3..530e78bdc92a 100644 --- a/lib/matplotlib/legend.py +++ b/lib/matplotlib/legend.py @@ -729,7 +729,6 @@ def _auto_legend_data(self): assert self.isaxes ax = self.parent - vertices = [] bboxes = [] lines = [] @@ -750,6 +749,8 @@ def _auto_legend_data(self): transform = handle.get_transform() bboxes.append(handle.get_path().get_extents(transform)) + vertices = np.concatenate([l.vertices for l in lines]) + return [vertices, bboxes, lines] def draw_frame(self, b): From 9f17739c04e802f4294b76fa67aae993017324ab Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Sun, 6 Jan 2013 16:55:31 +0100 Subject: [PATCH 04/10] Fix bug in helper function which prevented the legend from avoiding vertices. This bug was not triggered before because count_contains() was never called due to the empty vertex list in Legend._find_best_position(). --- lib/matplotlib/transforms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/transforms.py b/lib/matplotlib/transforms.py index 4c0f3d32337b..fe20ef4df55f 100644 --- a/lib/matplotlib/transforms.py +++ b/lib/matplotlib/transforms.py @@ -645,7 +645,7 @@ def count_contains(self, vertices): dy0 = np.sign(vertices[:, 1] - y0) dx1 = np.sign(vertices[:, 0] - x1) dy1 = np.sign(vertices[:, 1] - y1) - inside = (abs(dx0 + dx1) + abs(dy0 + dy1)) <= 2 + inside = ((abs(dx0 + dx1) + abs(dy0 + dy1)) == 0) return np.sum(inside) def count_overlaps(self, bboxes): From 612f3d233de8b290ff72dc7c25abb5f7c5f1f713 Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Sun, 6 Jan 2013 17:05:19 +0100 Subject: [PATCH 05/10] Add TODO note about marker extents and vertex overlaps. --- lib/matplotlib/legend.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py index 530e78bdc92a..5530ed44d9df 100644 --- a/lib/matplotlib/legend.py +++ b/lib/matplotlib/legend.py @@ -928,6 +928,9 @@ def _find_best_position(self, width, height, renderer, consider=None): for l, b in consider: legendBox = Bbox.from_bounds(l, b, width, height) badness = 0 + # XXX TODO: If markers are present, it would be good to + # take their into account when checking vertex overlaps in + # the next line. badness = legendBox.count_contains(verts) badness += legendBox.count_overlaps(bboxes) for line in lines: From dccfc6b03f48d598d5347fbed422cc593a13de85 Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Tue, 8 Jan 2013 22:17:43 +0100 Subject: [PATCH 06/10] Typo in docs. --- doc/devel/testing.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/devel/testing.rst b/doc/devel/testing.rst index 0f8ba4346837..5a0662f2d1ae 100644 --- a/doc/devel/testing.rst +++ b/doc/devel/testing.rst @@ -73,7 +73,7 @@ example, here is a test from :mod:`matplotlib.tests.test_basic`:: Nose determines which functions are tests by searching for functions beginning with "test" in their name. -If the test as side effects that need to be cleaned up, such as +If the test has side effects that need to be cleaned up, such as creating figures using the pyplot interface, use the ``@cleanup`` decorator:: From 632700b9d36d8ecdc6d7e13eafedc5f6ccb6a49a Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Tue, 8 Jan 2013 22:26:55 +0100 Subject: [PATCH 07/10] Fix test failure (caused by corner case in np.concatenate). --- lib/matplotlib/legend.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py index 5530ed44d9df..e191f1356a4c 100644 --- a/lib/matplotlib/legend.py +++ b/lib/matplotlib/legend.py @@ -749,7 +749,10 @@ def _auto_legend_data(self): transform = handle.get_transform() bboxes.append(handle.get_path().get_extents(transform)) - vertices = np.concatenate([l.vertices for l in lines]) + try: + vertices = np.concatenate([l.vertices for l in lines]) + except ValueError: + vertices = np.array([]) return [vertices, bboxes, lines] From 48b296aecd0d8724eeb88d59b0015482b2196705 Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Wed, 9 Jan 2013 00:57:17 +0100 Subject: [PATCH 08/10] Add new test for automatic legend placement to check that vertices are indeed taken into account. --- .../test_legend/legend_auto3.pdf | Bin 0 -> 6925 bytes .../test_legend/legend_auto3.png | Bin 0 -> 6947 bytes .../test_legend/legend_auto3.svg | 607 ++++++++++++++++++ lib/matplotlib/tests/test_legend.py | 13 + 4 files changed, 620 insertions(+) create mode 100644 lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.png create mode 100644 lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.svg diff --git a/lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.pdf b/lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dfc06c42b71b91663ad0a2fad08b89c5f5fccf99 GIT binary patch literal 6925 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.png b/lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.png new file mode 100644 index 0000000000000000000000000000000000000000..34f1c4d951d849582bb72847457fbc37f8fa3dcc GIT binary patch literal 6947 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.svg b/lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.svg new file mode 100644 index 000000000000..455b5fd9abe1 --- /dev/null +++ b/lib/matplotlib/tests/baseline_images/test_legend/legend_auto3.svg @@ -0,0 +1,607 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/matplotlib/tests/test_legend.py b/lib/matplotlib/tests/test_legend.py index f192fb4b23af..cc8e589db2b7 100644 --- a/lib/matplotlib/tests/test_legend.py +++ b/lib/matplotlib/tests/test_legend.py @@ -26,6 +26,19 @@ def test_legend_auto2(): ax.legend([b1[0], b2[0]], ['up', 'down'], loc=0) +@image_comparison(baseline_images=['legend_auto3']) +def test_legend_auto3(): + 'Test automatic legend placement' + fig = plt.figure() + ax = fig.add_subplot(111) + x = [0.9, 0.1, 0.1, 0.9, 0.9, 0.5] + y = [0.95, 0.95, 0.05, 0.05, 0.5, 0.5] + ax.plot(x, y, 'o-', label='line') + ax.set_xlim(0.0, 1.0) + ax.set_ylim(0.0, 1.0) + ax.legend(loc=0) + + @image_comparison(baseline_images=['legend_various_labels'], remove_text=True) def test_various_labels(): # tests all sorts of label types From 49ee4e8c7b8dfaf38fcb539e45fadb4b8620d123 Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Wed, 9 Jan 2013 01:01:07 +0100 Subject: [PATCH 09/10] Add FIXME comment. --- lib/matplotlib/legend.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py index e191f1356a4c..b1e7d96fa10d 100644 --- a/lib/matplotlib/legend.py +++ b/lib/matplotlib/legend.py @@ -937,6 +937,13 @@ def _find_best_position(self, width, height, renderer, consider=None): badness = legendBox.count_contains(verts) badness += legendBox.count_overlaps(bboxes) for line in lines: + # FIXME: the following line is ill-suited for lines + # that 'spiral' around the center, because the bbox + # may intersect with the legend even if the line + # itself doesn't. One solution would be to break up + # the line into its straight-segment components, but + # this may (or may not) result in a significant + # slowdown if lines with many vertices are present. if line.intersects_bbox(legendBox): badness += 1 From d179f4bb0719fcd9d015f5dca30d0e32560c562b Mon Sep 17 00:00:00 2001 From: Maximilian Albert Date: Wed, 9 Jan 2013 01:30:31 +0100 Subject: [PATCH 10/10] Also use 'loc=0' in 'test_various_labels' to further test the new code. --- .../test_legend/legend_various_labels.pdf | Bin 6408 -> 6398 bytes .../test_legend/legend_various_labels.png | Bin 7163 -> 7455 bytes .../test_legend/legend_various_labels.svg | 20 +++++++++--------- lib/matplotlib/tests/test_legend.py | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.pdf b/lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.pdf index 2dd7b3df0a8338dee80c109892aa09ac859448dc..7dca7d511169c171ec42d3b5cfc161ef48202284 100644 GIT binary patch delta 1067 zcmeA$`e(Rd6J!0!ygLRwZSSkNW2IF7)|oIoHfIvKfp5TrS1OGONTFu{%NtVpYogO(k_8{84E96 z47w~N$11kdsqXEAC%carnpg!(*T(0U=$ZdYNZFvrfBl6| z?w8uV7k9?IycLmIa^mn7r}-wZro^;dm&MA*7^<>WE8_6R4%T4MZ@z}kui?2T< zx4gn)`OnV9y{q}n+GYK|8k~FLKPTbU;j@YT!8UU)|9KgDY||`}FW9D$l+Ce&Nya+xHfn{O7fP-}4z#C6fg6TqHc! z^E39AFm644s7&pG9p}Md2iv+?2kW|x9!`5#ax?7Q`F&D{6<#jr_KW&uck#>5iSzk> zf9dcuFZk5^ZJFwmXHfxFE0tYTeI=gf)OGv+kTfg*P^w(9fA5K>Yh6lXw9Gx8W-r@3 zy*~W*@AmfT`%Rbr;MeAQZHV2W89VTc(S8e@tXn_!BWPPP&EuQxHnl(8^J7c;iB zz;KbVxjBYS#>QA&WME>5Zl0lm8N}XtBrh5oTVOcT(996SF^1-t-Z3&T!mz{$s1V&^ nBNGdhAkznhu8{>69~&5B7-(u{GJX< z9!Ici#Ja_$e0l!eyf0Z@t|fZmLm7c}jt7ln&$lefU_V!0BD;LG=`5wG>&zc@*`y!J z7FwdV{#zK^R4KR8HKCWkZ&IJR>*)kf{t1>*FKzdiZfZX6{ey9Tz24MF!v|Tne=U|p+@Jr z&&SFRww&EvY5xA%-959*Kj+=!uee`6t@8>0yp(-=o}LJuT`}jQ$yOgbc`wUPH3Fi? z7tOIO|M(;G=MPV-Mbj*qzwJz~Uz_H&H2sm6UP-!2nc7yT^;ewkU+3OCjoVh@<=XDE zqE$=9e(j5Uv31VNTM?OC`p-^ju3MT`wKV;gm);k*gB$dex%P&7ta)QxyOHhE8u?Qz zuPyaX`QqVSo8%MNJW)n;@s7^MC|4GCUZ*|rjGLza-aT)dzlu*{_e2}hr9Wm0@7huS zYq!WYi<7~{UGpt&?XcNsm{YK6`J*#+&nhOXo44uueY!H|(et%EnIUP1^hP zvj}JKjU*L+U(J6{udC+YX?`7M`YP$0|NYC)RoBNlcfZfS?YQ~x)Tr9?hT<<&lw-I} z+@u~?&tCCIY3s+n%(>I+CT_SR6~4V9xb$BcdZg4Dh9^LGfnXx?H`{%+0@gHpM=PX8a0ZP6C8F0q^CJ@Tt1 z&+K2a?C1N#Q@%ZUdj4redHw%SQ$Ba^zme1ZgDW*JrMRRhH8B^&%1_GTGBi{$PyjK^ z3@o@dE3^C*n7XZi7pyB`k diff --git a/lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.png b/lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.png index aee83850ecaeaec268652d63aa506821bc8de8d7..85f568f6e945f54e5968d4181810ef654bc96c4b 100644 GIT binary patch literal 7455 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 literal 7163 zcmeHMdo+}5+rI~)6DG+qG&;Nz6LKgq2xF%b*+N1na)`kur-}SY`&nz&b3OOm&vPHI>-W2UchuQ4 z=`D=06aE={7}jLzzARH#^-PNos}STg$cS6py$oLrnde72w&Rx z!JeUVt^y#P{+*G5)%7$6d!FT|80{`3mpUs1!xGvZ&hh4g4Um2otCjFS$;*h^NnGRgWd-5+Z zXGpV6^aPabA|=QXD)c?IIdKn$HQ8P2`_Yi>0-9@Dk<~KhC{6(M@a0ct4X?0~(O6{d zJ$1J&4@ceG+S?nm%~GRf>85e3dIQzuKzdUg^mZL%RtucvgQ@M+W96C~8#O@nokK#( zhp)yrefspNZ{|Wr>1-B9TDbB{J@Lo909@r01R&7_53Mz1Uj3!pgRCG^hM}TY1%S-Y zU{5<{$yaM;)tw9QkvqPuf62$od6gXYAd`%i6Vv6FDN8;fWej@H}X3Eafqx3Om2Wn({b}%BQRhR7t;v? z_#-@g0GKN1gFi9pniamMPMz{vt9ab)A*Q_<_@-?Zk#KpCm1T9%m_&)U%(WUe0yUVi zorfg+vn>_v@~!iTL~-3M0IwkLdsazF$>Mpp3l^)`({skCtU|W1&@Ib>Xbja1(9E%e zfqD~s4Q!|)Sp97V?qEu)V=N)W=x0Qxn3>r;hB1&#_Hs}>ZV14wsB*|uC&}( zrl=e|otyWzac*ua^z|5NA>bsqSwtJZyqrzA?piZ|E}w#dak#uM@bo<3OmArp6s52L zSP+Ej_yy}C26%glf2#uZNP)J3FX|=z^Ceb@^3$hPJK*hvamrk=7`*-N{S}Y*Q$@5} zyg`9aG8eW%!?%sl|aA4bJ7|&sqYeF{b*oNsbw{vJ1 z-eAo%HmT^Pv>1X`H0QqlQ)Jqz;gIxVlQhvgRH)^7`WPOX$6Ggmq>I4zh{}p$ zACa{~&J)B`M3qFO!lj&%$YN%R8Jw$ktVD*PXxyL!_cYJ@A%$E08p$e9Q&ojS8?&bu z>h$GLGOXU2j`h`y#)XB2Brj9clmKx9H&~R%V#AZkAJThi$L}k;7YWXFH zfDgDF)4r?AkG$8o-mM|l>B1G9*LL~gK0eOQh@PJ4vMfs<99xHbSmYXz3F2{W zS(tzz$yG)RD5Id=lkfO* z`=wWd!t<3GAH>DvbO#qNTP;*!f$vb+)}F+Bgtzsv)&0>+K|W1Qw

SUM?#(KZtai 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 S9L4~2eP?{e=!KzE#D4+AQ8QTp diff --git a/lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.svg b/lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.svg index 3805a4cda425..1d0fcaf3c143 100644 --- a/lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.svg +++ b/lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.svg @@ -1,7 +1,7 @@ - + - + - + @@ -587,7 +587,7 @@ Q26.2656 6.10938 33.4062 6.10938 Q40.5312 6.10938 44.6094 11.75 Q48.6875 17.3906 48.6875 27.2969" id="BitstreamVeraSans-Roman-70"/> - + diff --git a/lib/matplotlib/tests/test_legend.py b/lib/matplotlib/tests/test_legend.py index cc8e589db2b7..93740044cd3d 100644 --- a/lib/matplotlib/tests/test_legend.py +++ b/lib/matplotlib/tests/test_legend.py @@ -47,7 +47,7 @@ def test_various_labels(): ax.plot(range(4), 'o', label=1) ax.plot(np.linspace(4, 4.1), 'o', label=u'D\xe9velopp\xe9s') ax.plot(range(4, 1, -1), 'o', label='__nolegend__') - ax.legend(numpoints=1) + ax.legend(numpoints=1, loc=0) @image_comparison(baseline_images=['fancy'], remove_text=True)