From 0d11d38ac4fa55d1f5218a7279221dc035b7e86d Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 12 Jun 2012 14:45:53 -0400 Subject: [PATCH] Fix origin handling when interpolation is None in SVG backend. Issue #925. --- lib/matplotlib/backends/backend_svg.py | 10 +- .../test_image/no_interpolation_origin.pdf | Bin 0 -> 2905 bytes .../test_image/no_interpolation_origin.png | Bin 0 -> 4793 bytes .../test_image/no_interpolation_origin.svg | 104 ++++++++++++++++++ lib/matplotlib/tests/test_image.py | 13 +++ 5 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_image/no_interpolation_origin.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_image/no_interpolation_origin.png create mode 100644 lib/matplotlib/tests/baseline_images/test_image/no_interpolation_origin.svg diff --git a/lib/matplotlib/backends/backend_svg.py b/lib/matplotlib/backends/backend_svg.py index 59ba7b6ff198..0b9b7ab51701 100644 --- a/lib/matplotlib/backends/backend_svg.py +++ b/lib/matplotlib/backends/backend_svg.py @@ -794,11 +794,17 @@ def draw_image(self, gc, x, y, im, dx=None, dy=None, transform=None): attrib=attrib) else: flipped = self._make_flip_transform(transform) + flipped = np.array(flipped.to_values()) + y = y+dy + if dy > 0.0: + flipped[3] *= -1.0 + y *= -1.0 attrib[u'transform'] = generate_transform( - [(u'matrix', flipped.to_values())]) + [(u'matrix', flipped)]) self.writer.element( u'image', - x=unicode(x), y=unicode(y+dy), width=unicode(dx), height=unicode(-dy), + x=unicode(x), y=unicode(y), + width=unicode(dx), height=unicode(abs(dy)), attrib=attrib) if url is not None: diff --git a/lib/matplotlib/tests/baseline_images/test_image/no_interpolation_origin.pdf b/lib/matplotlib/tests/baseline_images/test_image/no_interpolation_origin.pdf new file mode 100644 index 0000000000000000000000000000000000000000..84f18a515e1fb6364b678393d4227919f91cd852 GIT binary patch literal 2905 zcmcImc~BEq7)KG*)q0|$F#42&h{_&0K|CN3K%^qUMyjAovS1)&L$Y8z3o1H@2Zx{_ z7C}+*s(4n^id8)7)p4k{7BDK_I-|CpsPye75hT=hrfvS&?6>cI$M5@nhijO>bR_P{ zM_hN*g6)+E4lqE+#3MdF0F9Wfr2r}+8B$Hh0W^$^qx67)2g1RaF$kqmvIoU2E=-vi z6Hh4^AmYxz3k*Z)G(f<&v@OogiarBFR(U;rAN2-W(TpAz#k7(@Xyz`z8` z7?Pm?-=sh`lT@lSaX@HNFQqjM;Bo((-N7*^umljOqm#9O4MidYs6UmWQc&T6&=`D+ z(2*Lwmef%i#cWHcrt@RQu(84qj44E9V>?Hec@lmQ$Ly!O}Rl`XADFv;BHz!blqzI zCL)HSyzJ2U6IhS*m)_OWs$>`LU2XIWN-4=4xZ#hby$)_#H|-ej0M&cA$1wX<2A|RM zFT1?rckKua9lP`^7^R>DQ3X=N){K(4NK6$;m^9bU+7P~DDu6(Wpd7ElgRd)>+_5HrS038 zS+du0bMe;ha~Gbb#f7(W${nuGlic#SbGG)#n?dgzi@zmz-LHu(EP9>c$SXU$dtgO& zh@@e}sfI5j2W;C{RuX#V>j4jTc??;3<^bxO5Kvd!GjG`|X@FBzNz$6K(kr<&?;Edk zDpU*FB}poVvBWdOVWuDl6N@Jy#4NOAd0~dQ8F!XPRzjAYRzj9yRzjB6W+57k1Kd;! zXfOeAD;l;ih00Y*m`nl2GD1!3WLi=Ib8MnxppJy}3!+qUGg-Q!ZO{QhWyvuNSBqS+ zG}D7CEDPr>#fSQ-7=0L}lhBD;TEntf%$Dm11~oPnzp$~{a$2#z4J0jK;DiN8E;LKj zvQSc=0C27z!6)P5%FGfL(pFfo3jZQ3bA6lIk2x&l@4~V>KH9y5jg6i0CFbaUs5-S> z!NnOj?A-hQ+UGV3oGJ^ z99?f+ad$%F%SGM;2GxDNKU&^#TDLa~&X;vAUOM0Tsc%jC+F89Wx*jdmxoxc3mh*7D zdU(E^nV#*Eeu+Q3{OPC_J_)-^zn9z9|NQ#*->$vg6d#d3r&P1G%Y)V48&b+gdIata zJ6AJAFtNHkGJZ*6sb7t|V8Zjg{f+Wb*UuoY$3KOZ-phX&E*x=*bpgD|(v8&!^)0H}o`hbMtik=k)Y-w}tflsVUgg z`F!xN=_z}4L#hKx_HDnt`@|Req$%aDYaSDiH#`D2_T+U*s7~wSx;^St#+^N0r6mqY zVb_}K&x!ZnSJr3Po?f;x-`VT=+p;a&zxnR@FN*@d8n__EST}#{v8Xqx(~W&=Qy)I* zGq2kkqr}kt;)zIuZS*3!QGBEW`orEQpZj!MY6K2dax^-vueN(lDiUUoRC#9EUbZQ4 z(>HiVf^*9B9oe&#x$4|vaC)*_jb(a?> zQ~EjGRBSo?uCD2w@YPF)2z|tg-5R&#(Hk@E*84NglLv2pxA;KrkDFJ&?ik{X zT1Fuu!L(TTGP63OIz_6G=v^rWv&=256PBAcj;Vz!?LNaH{B! zPvD+}r(pz`$uL@P6m7ohsgL#4P|UCvOOioH#UdCWa0L7C144m-CjhbFgA9k2%Km`H zA|r4w*pWY$VIl&SL2DTw0@+$7f?%|kdBK&Ul}yYIvQ{!oXl<7#f>W;5IRb0L7i$^b zhR--AfQ8yhpIBgJ7sq&3HgExEg%vI!tYsq13Ks$wS=k_nmUbB(sZvuqZU+w5#L|Fc l6{9^FCau@ z4Hp}CbW?52Oj@l`acA60yBjbrB0)fsVa03}SwnJ;RDmE-Vgd1n$h}9~5A94pG#@*| znK^ULdA_{w{GZG3|DKy4`s@7$n1nat+Q^s^BKrzQLnI% z{r%w+(Vbf)a4thu(rtMmkY*%oVA=<&_J8s2k+)v&coTJDAa%!=zxZ_J(ioVE|75ybgKCqGA9j*&YkP?S0W;RFG&f z{Hqb>t%bC@OS!qZj$n|}B@l>hHk-nX27tuia#cUV<6)!Gn30|?ceptBw?8IU@p!`m z5}yZ81MvK~lD&L|czxX|mMuSe?XdUTJIBdTep$#mLh7@G7t`EaMWe&Sh9-xM4!;zt z9T+w{nioPA80)PfcTkmw1cBPLeEt$^AP9Nr+>~PfuWAVeYKTK#6<*IOuD#{U&RONC zlf>Owg9bvmT*u|$E7HAmZKb9;S2L}|W?A~EW3y0bP-Fv#xFwW%*e~mRvbH1?$ zC=Q-LF=epqAgpt5T_LMyP86r*hnvWh7KoH2rj&^^Ju(RvlRBQK!IrTXt$yjcTDX}q zI~GyCz2DUz@~a?IaGEdnkok!g66r)7LqS;iIPksA~o&08VU0WA{dbQ9+``@HpBC z|4)-)T%#}pnOH1_d_G?Wkyto7I$EPT1OV@a-(OpZj7o__Qq5p6;A!7SyKi5gMO+7w z9}bFTDDaTXUY;GPU3VG_X}0g zHH;OJYBMjXq5KxKTA*X!zpOntk*8r|;67=DxS!DLMTpeOBo(;LWu~@Bc*Jj5)kk1& z>fl}k2a}UEl!u7R>5i|I&k0}lA^acTct#Jc31`>B@UJISZtSHAV%%-(iWCaoc`->3 z4UlCs)OV-f?_doH7ecuNp4e{oHU}Occ+EJt^Rcim+kuNi)`k!S_jnpH^8_?pu3f&X zV`px8A#as-Ei4;*zCgxx0# z)N?Zw*QbbDmQlOnly~W*6yfUJQYx%rMydycEG<3MiZ!(P){0$o^iaM|ZmH2uR?4hq zUy2&_YOoW3#v{+n%oIVMCK5k=$fWU9W;(92cN-Trt>uGFYni>}-4yS+2C;_G!6}3D zVKh z{nISumx=V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/matplotlib/tests/test_image.py b/lib/matplotlib/tests/test_image.py index 1a5282f7fec8..15d3c41e0420 100644 --- a/lib/matplotlib/tests/test_image.py +++ b/lib/matplotlib/tests/test_image.py @@ -152,6 +152,19 @@ def test_imshow(): ax.set_xticks([]) ax.set_yticks([]) +@image_comparison(baseline_images=['no_interpolation_origin']) +def test_no_interpolation_origin(): + fig = plt.figure() + ax = fig.add_subplot(211) + ax.imshow(np.arange(100).reshape((2, 50)), origin="lower", interpolation='none') + ax.set_xticks([]) + ax.set_yticks([]) + + ax = fig.add_subplot(212) + ax.imshow(np.arange(100).reshape((2, 50)), interpolation='none') + ax.set_xticks([]) + ax.set_yticks([]) + if __name__=='__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False)