From 08b64e4cbc201e3caaf783e6ae406d038e8744eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Wed, 15 Jun 2016 22:02:31 +0300 Subject: [PATCH 1/3] Implement dash pattern scaling in pdf Factor the dash pattern scaling into a separate function so GraphicsContextPdf.delta can call it. Combine the linewidth and dash comparisons because now linewidth affects dashing. Fixes #6588 --- lib/matplotlib/backend_bases.py | 21 ++++++++++++++------- lib/matplotlib/backends/backend_pdf.py | 25 ++++++++++++------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index a038860d255c..c46e9cde521f 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -858,6 +858,19 @@ def get_clip_path(self): return self._clippath.get_transformed_path_and_affine() return None, None + @staticmethod + def scale_dashes(linewidth, offset_dashes): + """ + Scale the given offset, dashlist tuple to fit linewidth. + """ + scale = max(1.0, linewidth) + offset, dashes = offset_dashes + if offset is not None: + offset = offset * scale + if dashes is not None: + dashes = [x * scale for x in dashes] + return offset, dashes + def get_dashes(self): """ Return the dash information as an offset dashlist tuple. @@ -874,13 +887,7 @@ def get_dashes(self): if rcParams['_internal.classic_mode']: return self._dashes else: - scale = max(1.0, self.get_linewidth()) - offset, dashes = self._dashes - if offset is not None: - offset = offset * scale - if dashes is not None: - dashes = [x * scale for x in dashes] - return offset, dashes + return self.scale_dashes(self.get_linewidth(), self._dashes) def get_forced_alpha(self): """ diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py index 21719273c423..e368c98d7241 100644 --- a/lib/matplotlib/backends/backend_pdf.py +++ b/lib/matplotlib/backends/backend_pdf.py @@ -2206,15 +2206,17 @@ def capstyle_cmd(self, style): def joinstyle_cmd(self, style): return [self.joinstyles[style], Op.setlinejoin] - def linewidth_cmd(self, width): - return [width, Op.setlinewidth] - - def dash_cmd(self, dashes): - offset, dash = dashes - if dash is None: - dash = [] - offset = 0 - return [list(dash), offset, Op.setdash] + def linewidth_dash_cmd(self, width, dashes): + result = [] + if self.get_linewidth() != width: + result += [width, Op.setlinewidth] + if self._dashes != dashes: + offset, dash = self.scale_dashes(width, dashes) + if offset is None or dash is None: + dash = [] + offset = 0 + result += [list(dash), offset, Op.setdash] + return result def alpha_cmd(self, alpha, forced, effective_alphas): name = self.file.alphaState(effective_alphas) @@ -2288,14 +2290,11 @@ def clip_cmd(self, cliprect, clippath): (('_capstyle',), capstyle_cmd), (('_fillcolor',), fillcolor_cmd), (('_joinstyle',), joinstyle_cmd), - (('_linewidth',), linewidth_cmd), - (('_dashes',), dash_cmd), + (('_linewidth', '_dashes'), linewidth_dash_cmd), (('_rgb',), rgb_cmd), (('_hatch',), hatch_cmd), # must come after fillcolor and rgb ) - # TODO: _linestyle - def delta(self, other): """ Copy properties of other into self and return PDF commands From 54450fde430a01789c78107b663bdec41297bbf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Sat, 18 Jun 2016 08:40:18 +0300 Subject: [PATCH 2/3] Handle negative offsets in dash patterns I think the pdf specification implies that the offset should be nonnegative. --- lib/matplotlib/backends/backend_pdf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py index e368c98d7241..504d788dfd31 100644 --- a/lib/matplotlib/backends/backend_pdf.py +++ b/lib/matplotlib/backends/backend_pdf.py @@ -2215,6 +2215,8 @@ def linewidth_dash_cmd(self, width, dashes): if offset is None or dash is None: dash = [] offset = 0 + if sum(dash) > 0: + offset %= sum(dash) result += [list(dash), offset, Op.setdash] return result From a772aa439fe784a0fc08ea844dabed94716b836e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jouni=20K=2E=20Sepp=C3=A4nen?= Date: Tue, 28 Jun 2016 22:08:38 +0300 Subject: [PATCH 3/3] New baseline images --- .../baseline_images/test_axes/dash_offset.pdf | Bin 8858 -> 8757 bytes .../test_axes/step_linestyle.pdf | Bin 3318 -> 3306 bytes .../EventCollection_plot__set_linestyle.pdf | Bin 8684 -> 8669 bytes .../EventCollection_plot__set_ls_dash.pdf | Bin 1656 -> 1660 bytes .../test_image/rotate_image.pdf | Bin 2473 -> 2444 bytes .../test_lines/line_dashes.pdf | Bin 1674 -> 1724 bytes .../test_patches/patch_alpha_coloring.pdf | Bin 2109 -> 2103 bytes .../test_patches/patch_alpha_override.pdf | Bin 2110 -> 2104 bytes .../test_patches/patch_custom_linestyle.pdf | Bin 2068 -> 2058 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/matplotlib/tests/baseline_images/test_axes/dash_offset.pdf b/lib/matplotlib/tests/baseline_images/test_axes/dash_offset.pdf index 486d6a723afbb8296092528c9761fbff6cde8f4f..4ac809840adbeb1204d81585d085c6764f4ff52a 100644 GIT binary patch delta 4790 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 delta 5202 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 UCP5C@$7Th}Wyr*d>A4xmU-omL2><{9 diff --git a/lib/matplotlib/tests/baseline_images/test_collections/EventCollection_plot__set_ls_dash.pdf b/lib/matplotlib/tests/baseline_images/test_collections/EventCollection_plot__set_ls_dash.pdf index 3952787106ec2cc699da7173ddc9a24af4bd312c..6156bb874a3ede6f27ad37e67f74e87f5b008293 100644 GIT binary patch delta 869 zcmeyt^M_}Gj7LCXdTOzPk%ECjkb-_lWkITfzH?$pVorX#f}I^#YF?Dwsetx#j1TC>T!+bCn3rNKDDhOII)hNpR^$_$OthCYLCfPdq3i z?Ue0H`B156H6wE1Y=8QiDt1H#H?Q(J8+IsKfvWP0h^|OpJ{{$^#OM zfT|&Gob1UcJGqR}t-dt)w4aQjz@FdQzqt35{jN=E*&<|qLb1I=I8rQ3pi|-C`{lNB zw@o`dtfhAET6O2~x~(OF)6S*5P&%(3X?3bN%&ly_))I~P)4#rzJ$)+Yz4}tQs}H?a zygy{I>PXOq7*n(C`)2yLk3C(p`Ay4}>8tCUcZm)`>mUi`{CURzU#~TpSNGWTez^jJao-Bwc|pa&XK!kcKGg@x28@byZ4;g z&Lnnz1r@8sGZ&xC6jE<-i7zR!OEvElc3M=kpFd~v{3D!<6Q8;zosvoKXJEW|l2vWp zT7D%5hcBwHgO>cSG;wg)vvhmiZy)peqU-ZZk8Iih%Cca_s*c1z>*J58sazCZ_eIY;`;IV#Bu5HqQKW3`?HvW4Olecw~FCn9R|%wi5-+8*aZ{@bI{0M!XZx zKFdmsUD~7@?&h)c+H<(b6vys+ zb};hrh49|gpR-K@qnlP;pT%=(QS$DUub51D^Sc69Jv7oeu`0v+!k4IEM@grdk9?kN z>V9$I?5DNA*v(QnAAwR;aY<2XVlFIw85#m(9F)LJOpG>9W|n63H8U_XvM{tTHZw7a z(&W;22C6Q}FH+FRO)M$M$uG&tOj0n=E66V{F*G$c(M~r_O0qCYN!3xvC@Cqh($_~Q z)5|YPpL~EtWwI2j8>8vuL{?#2U}6UWg**i=FvGyW(!>~D%+SCDL!F_4nepU}tip^Y dlaI3ci(<+fnwd`4WOL&*GUQTKb@g}S0svndQ`i6i delta 857 zcmeyv^MhxCj8#ZwL8^kjb7DziPJX(Aen4V+YO#Wmf`LMif}I^#YFrLC#JZnxmJ|82bUz4q$-$zv~cMMXC$U%=A|o`flbhN%g-xOFrIi& zX5vo^K9K1}sXzg+@skZ1Ww;#k^72cH6`~blCr2{M3UKK=12q7Z6f0PQ447QT=vF^< z>S;e^Ljl+C|GIuLB~QQay~%M_>*jl93*BGkr#w+3sN~J-$3@}g z?p8ZI>NPGn*130;JdgR1`18Wk^Q*Pju6x0KX->tbf~o&X-)-N$Q}n+5#Lg8T=RE(p zsOxTecf7#zd$snTcXk}=elu4}zdPXE)pW0&KkB{Y_rGYo_u|K@2dIhkl~cXg#Qkk$Y0_=Kdh#~N;*n0N1d zc>l}xn6;1VFZqXCKP=r`n6hy7+Ha|kqIGv$)-O&^{r7)U(-hGs`)o|pKeYB;DB2-# zf$g3w&x*|sa~$^^wsT-i%54x_8W3Z>Lwvsb%GRmO8_N!K6ltuJUAbBRE1|^{4 zlA_eaTv$>vG=!!l6BFajlbEF$g-i`h42_KpjEqf9v<-~Z4Gh#L|6)-w1*Qd{zLNYR z1&!Rql7gK4lAO#W1w%bky_D24Lmh>Tl9B=|eSL(SUVc&fWLZ{sTVUD)0fjsTE-=Hu zz|zPVQ_KXIWKq=_8kiVQUdSpeibcl4bn;17e^Cr`3=Pf9ChM}faT=O)sj9mAyKw;k D&zVp< diff --git a/lib/matplotlib/tests/baseline_images/test_image/rotate_image.pdf b/lib/matplotlib/tests/baseline_images/test_image/rotate_image.pdf index f205e7ca7468cf16bcfe37b483f3a961b77b8574..650aa594bb6c37bbe1c02645eb66aeb05577c16e 100644 GIT binary patch delta 1327 zcmZuxeNYs27!Jh_PN}8~&?5L{p4~yyesFi(AzmUU1fFo+$+vtQcgwMK>|T3&bY~w2 zL6Z%J%638o*r?&i5jdHNjDR0#M+8nYQ8eOAWJ5rR5(A?(HtjApl=}PYeV=)L@B94m zJnwPQUeW#?QQMq!l7TkT7?1%N=mC^S5;TZjs&z)1#wY^FxmI}KAnb+=B}Ow&Sb&0u zpsci_Qp`ky82*D=EyM^jSyU=SU>4wtxHtgC69h@yK`zJxPy#z1BiK&0G$4s09X7zR z5)1&+VCA?8(Sm+XfAp9qmXs0R6SSEBfc|N*QD?-*>zUdP7J%Z0D zqX%C1dLp|VD%+N(6lr_T6Yc(;`xvD=r(1AzSlj!~9aU}fx@t?6ZH3?pb=R-DdDjcq zHF?^sP*=+!vw6TbHSa|VzMY6~?e*<#J}(}P`?}6usI{7cEy3!)Uy%#4c|A>^VJ8YJC&ri(V{_E=a?Juuh7#9mFnxNsz$3nMczgKnL7girI zc{r${LE_5)IjGg_a#Txw*PO-A=nGSSHB?s|MEdt{NNLdytfzJbW=@2?Js&bYCzu%u z|Jx*R=a=7l6&>tLtDCnB-Nh{(F_*e>B6@bFgw!|IF%{C?QY^nlv{CwLR)5XHo&)ce z%=aEWviixhZ+>RZywN@TL3P8QZ=9Jr)YW;q`xD3Fvl$|LT?1pNkNU+bk+#f=FTECY zwkL4xsUOefO4Gum-bw4ohh?QFDq}x>ze+T691VACh2^^RH64?wZPV?t5z3TKe>Hts zAs^jyBr)>QT-uWESWL|oY&u;k>o^(Hle}YW^-QbiJ71Si{d9J}rY(EGn1S}WwkLTT zM~gF^UwHD9AJD%7&i_QFA+xGd)i3Q!J#+3AtvFA=j zZT<^PU9Ia)x*slk1O(w&Jv1hfxV+nT;ekw<-Z6SS1lBkXDkivjJn1 zV0DxccECmj(ovWhH_;@;b!s(h(a`u;Fx*nYx*T2h>b+PR97Qzm@#Hej~@PdZnP`K?VL9qe{i>vr7CWspy%9^^4r!Sm}`6|CuLoFp{d36N-FQ5aFc3RHb=9!5qSM%g-xOFov*QD@xphOA<>` z6-+<^T>1ftB_*jvc?zar`H2+<^>%h#sd*{+Nm*Qm20%d&!^TEI-x+91YF2Atr&(IVV>fNrx4O5T`9u9*n%xe)v?_LG z?O&-644#|YwPs2F`%`o5#u^!;hXp2457y>>WwY>0rFjz*8xw#3lx-^qf)s^-T8AVg4JlZT}qS+wD2P(=w*NNak9)MPjXg9G8Y=r<(ffCr_3hQf>8`(-U!| z`)fyMQ^x0oX)7xQ_S7$)Bp$mbXKKrgTUGnAR`1B4-;lTMrg?<#8P6m?zGTfQn-?yt z*fUk+xL8HCXhrB9ru?NgnM>9z+U&dj%_=tO6_ZmfECT1QdVKIneFFQ{BM(-+Te9k$ zSFrB-HC^Y-_HJ4&m2)UiS+sfWuFb2gsu!xDk>%uD%m&)Yi3*0m#O4T0JkW%T$P~b2r0-}1PM#oTll567Ci}9a7{XE< zG#7cKW~OHVleCe7et2dIC@I3tg62J7suZ7mlttYvpeQvZGr1(c2&~3AKPSJa7?>G> z*(s+qH?J5ZYG((`45djW;7sJ13(Q4alQ*!4Y|di6%_!lWnF7jW;H($~%4^Q~rNG=| zI60PG*^o=$8JOllhHK;|mK5aVm*iw7DH!UR>KW)2oq?Q?Ir(33(B_&xJ zOg_zSGr5snM8wq4$jHdh$iURtSl7Tr-M~OylWQ_NhfA6nuv`EEg**i=FvGymzyO%} z(8Y{_WdoX+p%JD!LsKm3%nc`RU-v;hHz{0F;T_xBvhE diff --git a/lib/matplotlib/tests/baseline_images/test_lines/line_dashes.pdf b/lib/matplotlib/tests/baseline_images/test_lines/line_dashes.pdf index ca440b3adecb0e91f4666931a840c03fd6243e7d..817d12cd8d2d613540e4d72647b437a2d9cf1178 100644 GIT binary patch delta 917 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 literal 2109 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 USWbS=?#5|m%B8C6>hHz{02e$$ivR!s delta 1526 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 delta 1506 zcmeAYm?AJiMn9yoAXP!%Ik6-$CqG?5KOiwZwOGMO!9XEM!Oo5=H7_MUDT~Vj$Oq9j zHWOo{Wfb%y{FAa$lS>rL!Rqu~D@xphOA<>`6-*`;J5M|+A?BN!l9}j~U!f2URAHcC zYHp@rVr(?=sct>QKKG*h(gFqjU~TW0hJX2<9or`=|2b3t|7O$k z{rYQu-ug1<(Ai2^)3%^gXMx$D-GysP?G%-I);?Ry)GDN#@?J@F#nm>Mm_`||tpOJu z8J^tj?v#sljlkK~>R z)m{@+`t>YBT}j&byy9CU4eeD?r=Bm|rsZ^%b83f)&-c%V?p&Qqh^#8l`37 zD{4$yPuymi+o^cwS%$9D^xcdp%#uM%&qUu+_HJ3b{TBn)tE|?q>#!m!=y|nz6_Eq3?aibMh^*J`7T>$Diy8n7A`2yO;|Pu9?qQ@TG+>d3~IXxAS&ztMMt0PYDYGyenN+tn#x3YB`jQaRM?&9`DSbUb?IK|Z?EpYeJ?-#_Uz9m{`$R| zYib|A6+F8~C2pac!MytBk74t~_cc^Slpl9+6026vU9aCPVck24=Y)Wm*Avb;mk!Cf zhqkoJUVneUFEhD%vwB!d@7qs@_%ahyz1Yh*xU2UhF5j}@t(okJeK9-K)>d1}eEQ=q zZ0@%`-8?%n)c(?|_u7*kP4_3aY?L)QxjP_O-C${4vEB~H&%M&S8gIV}(^0+7+d}(#9psTd!8yX~~-3pB{U7q41ob>`%*VIoD^)e_8P1$t-(|&@W#= z5=DWH6B2r5g0K-nK+9;C3+cg`;b78r(;1=z$4x%8cZ&MC<+QqagvEGfvz zFUiSFQZUpr)icm5$S*E2F*epqNi8$bPB%(2F*h|apIpdhqXE&BnV;tZD#SEgtc(l{ zO$`kVEe(y0O^gh54NTMx4AeEbCa-04t~ap+7BL{8kf*=}W*8V68=7H?83T()G<7D% xnCeVSv8Xc#7Hg<_4GhdoL1L5h*-gcbEHTY7HMN|)o867m$dXG{)z#mP3jn!^LtOv>